我有以下数据框:
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
我可以使用字典计数器以非常低效的方法执行此操作,但我想知道如何在不创建较小的DataFrame和连接的情况下有效地使用Pandas。
答案 0 :(得分:1)
您可以melt
使用crosstab
和reset_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