简体   繁体   English

Pandas groupby/pivot 表,用于计算 2 列中的值

[英]Pandas groupby/pivot table for counting values in 2 columns

I have a pandas DataFrame like so我有一个 pandas DataFrame 像这样

week  player_a  player_b
 1      True      True
 1      True     False
 1     False     False
 2     False      True
 2     False     False
 2      True     False

and I would like to count the number of True and False for each player by week, but I cannot seem to finagle this into a convenient pandas groupby or pivot table operation.我想每周计算每个玩家的 True 和 False 的数量,但我似乎无法将其转换为方便的 pandas groupby 或 pivot 表操作。 The desired result would look like:期望的结果如下所示:

week            True  False
      player
 1   player_a     2     1
     player_b     1     2
 2   player_a     1     2
     player_b     1     2

Use pandas pivot_table function and aggregate by size.使用 pandas pivot_table function 并按大小聚合。

df = df.pivot_table(index=['week','player'], columns='value', aggfunc='size', fill_value=0)

Use DataFrame.melt first and then count crosstab :先使用DataFrame.melt然后计算crosstab

df1 = df.melt('week', var_name='player')

df = pd.crosstab([df1['week'], df1['player']], df1['value'])

Or use DataFrame.pivot_table :或使用DataFrame.pivot_table

df = df1.pivot_table(index=['week', 'player'], columns='value', fill_value=0, aggfunc='size')

Or aggregate counts by GroupBy.size and reshape by Series.unstack :或按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

And solution with DataFrame.stack , SeriesGroupBy.value_counts and unstack :以及使用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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM