我有这个数据框:
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
关于如何做到这一点的任何想法?
致谢
答案 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
crosstab
和pivot_table
可能很慢。为了提高速度,建议您使用groupby
进行一些手动控制。