我有一个像这样的熊猫数据框

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.stackSeriesGroupBy.value_countsunstack的溶液:
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

10-01 15:55
查看更多