Groupby id和transpose唯一列值的计数

时间:2016-01-17 07:05:40

标签: python pandas

我有以下数据框:

    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。

1 个答案:

答案 0 :(得分:1)

您可以melt使用crosstabreset_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