计算分组依据并融化数据框

时间:2020-10-31 21:31:20

标签: pandas pandas-groupby

我有这个数据框:

player  |   type
1            slow
2            fast
3            normal
2            fast
1            fast
3            normal
4            normal
4            normal

我想对每种类型进行计数,并为每种计数创建一个新列。看起来像这样

player |   total_normal   | total_fast   | total_normal
1              0                1               1
2              0                2               0
3              2                0               0  
4              2                0               0

关于如何做到这一点的任何想法?

致谢

2 个答案:

答案 0 :(得分:1)

您可以使用pivot_table

df = df.pivot_table(index=['player'], columns='type', aggfunc='size').fillna(0)
print(df)

type    fast  normal  slow
player                    
1        1.0     0.0   1.0
2        2.0     0.0   0.0
3        0.0     2.0   0.0
4        0.0     2.0   0.0

答案 1 :(得分:1)

尝试熊猫crosstab

pd.crosstab(df.player, df.type).add_prefix("total_")

type    total_fast  total_normal    total_slow
player          
   1       1            0              1
   2       2            0              0
   3       0            2              0
   4       0            2              0

crosstabpivot_table可能很慢。为了提高速度,建议您使用groupby进行一些手动控制。