2017-05-25 20 views
1

サンプルデータセット:PANDAS整形データフィールド日

data = {"id":{"0":"1234","1":"1234","2":"4567","3":"4567","4":"4567","5":"89123","6":"89123","7":"89123","8":"18749"},"name":{"0":"bob","1":"rob","2":"bob","3":"rob","4":"sam","5":"bob","6":"rob","7":"sam","8":"dick"}} 
df = pd.DataFrame(data=data) 

その行の値として名前列から列としてidカラムからの各一意の値、及び、各関連付けられた値を有するべきである溶液。

私はこれをいくつかのやり方で行うことができます。これを尋ねる私の目的は、これが可能であることを望むようにすべての異なる方法の例を見ることです。私はそれが本当にクールなソリューションであることが判明し、私は何が起こっているのか正確にはわからない

df.groupby('id')['name'].apply(list) 

は例えば、私はこれを見ました。私は、各id値に関連付けられたすべての値をリストに変換する関数を適用していると考えます。また、スタックを使用して、スタックを解除し、転置してピボットを使用してこれを解決する方法を知りたいと思います。

答えて

2

再構築

pd.Series(df.name.values, [df.index, df.id.values]).unstack() 

    1234 18749 4567 89123 
0 bob None None None 
1 rob None None None 
2 None None bob None 
3 None None rob None 
4 None None sam None 
5 None None None bob 
6 None None None rob 
7 None None None sam 
8 None dick None None 

​​

df.set_index('id', append=True).name.unstack() 

    1234 18749 4567 89123 
0 bob None None None 
1 rob None None None 
2 None None bob None 
3 None None rob None 
4 None None sam None 
5 None None None bob 
6 None None None rob 
7 None None None sam 
8 None dick None None 

fill_value=''

df.set_index('id', append=True).name.unstack(fill_value='') 

id 1234 18749 4567 89123 
0 bob     
1 rob     
2    bob  
3    rob  
4    sam  
5     bob 
6     rob 
7     sam 
8  dick   
2

ピボットを使用した別の解決策。

df.pivot(columns='id',values='name') 
Out[280]: 
id 1234 18749 4567 89123 
0 bob None None None 
1 rob None None None 
2 None None bob None 
3 None None rob None 
4 None None sam None 
5 None None None bob 
6 None None None rob 
7 None None None sam 
8 None dick None None 
関連する問題