我有一个像这样的熊猫数据框
week player_a player_b
1 True True
1 True False
1 False False
2 False True
2 False False
2 True False
我想按周计算每个玩家的正确和错误数量,但我似乎无法将其编入方便的pandas groupby或pivot table操作中。预期结果如下:
week True False
player
1 player_a 2 1
player_b 1 2
2 player_a 1 2
player_b 1 2
最佳答案
先使用DataFrame.melt
,然后计数crosstab
:
df1 = df.melt('week', var_name='player')
df = pd.crosstab([df1['week'], df1['player']], df1['value'])
或使用
DataFrame.pivot_table
:df = df1.pivot_table(index=['week', 'player'], columns='value', fill_value=0, aggfunc='size')
或按
GroupBy.size
计数并按Series.unstack
重塑:df = df1.groupby(['week', 'player', 'value']).size().unstack(fill_value=0)
print (df)
value False True
week player
1 player_a 1 2
player_b 2 1
2 player_a 2 1
player_b 2 1
以及含有
DataFrame.stack
、SeriesGroupBy.value_counts
和unstack
的溶液:df = df.set_index('week').stack().groupby(level=[0,1]).value_counts().unstack(fill_value=0)
print (df)
False True
week
1 player_a 1 2
player_b 2 1
2 player_a 2 1
player_b 2 1