[英]Pandas groupby/pivot table for counting values in 2 columns
我有一個 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
我想每周計算每個玩家的 True 和 False 的數量,但我似乎無法將其轉換為方便的 pandas groupby 或 pivot 表操作。 期望的結果如下所示:
week True False
player
1 player_a 2 1
player_b 1 2
2 player_a 1 2
player_b 1 2
使用 pandas pivot_table function 並按大小聚合。
df = df.pivot_table(index=['week','player'], columns='value', aggfunc='size', fill_value=0)
先使用DataFrame.melt
然后計算crosstab
:
df1 = df.melt('week', var_name='player')
df = pd.crosstab([df1['week'], df1['player']], df1['value'])
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.