2016-01-17 50 views
1

我有以下數據框:GROUPBY ID和TRANSPOSE(移調)計數值

id task1 task2 
1 A  run  eat 
2 A  run  drink 
3 A  walk  drink 
4 B  walk  eat 
5 B  jog  eat 

,我希望把它變成

id run walk jog eat drink 
1 A  2  1  0  1  2 
2 B  0  1  1  2  0 

我可以做到這一點與使用非常低效的方法字典計數器,但我想知道如何與Pandas有效地做到這一點,而無需創建更小的數據框和連接。

回答

1

您可以使用meltcrosstabreset_index

df = pd.melt(df, id_vars='id', value_vars=['task1', 'task2']) 
print df 

    id variable value 
0 A task1 run 
1 A task1 run 
2 A task1 walk 
3 B task1 walk 
4 B task1 jog 
5 A task2 eat 
6 A task2 drink 
7 A task2 drink 
8 B task2 eat 
9 B task2 eat 

df = pd.crosstab(df['id'], df['value']).reset_index() 
df.columns.name = '' 
print df 

    id drink eat jog run walk 
0 A  2 1 0 2  1 
1 B  0 2 1 0  1