我有一个包含体育比赛的 pandas 数据框:
Winner Loser
A B
B A
A C
我想要每个玩家(即 A、B 和 C)的输赢统计数据。因此对于 A,结果应该是 2-1。对于 B,它应该是 1-1,对于 C,它应该是 0-1。
我知道如何通过在数据帧上逐行迭代来计算:
for index, match in df.iterrows():
//code for calculating win-loss here
但我确信有一种更Pythonic/pandas-ish的方式来做到这一点?对此的任何提示表示赞赏。
最佳答案
您可以使用 groupby
方法和 size
聚合来执行此操作
例如
print df.groupby('Loser').size()
将生成一个包含丢失次数计数的数据帧。
Loser
A 1
B 1
C 1
dtype: int64
然后,您可以将这些组合到得分计数中,如下所示(如果团队没有获胜或失败,则使用 fillna
方法设置默认值)
wins = df.groupby('Winner').size()
losses = df.groupby('Loser').size()
scores = pd.DataFrame({'Wins' : wins, 'Losses' : losses}).fillna(0)
产生最终分数算作
Losses Wins
A 1 2
B 1 1
C 1 0
关于python - pandas dataframe聚合计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235591/