python - pandas dataframe聚合计算

标签 python pandas dataframe

我有一个包含体育比赛的 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/

相关文章:

python - Pandas 使用 dfA 列合并 == dfB 索引

python - 如果不修改,dicts 会保留迭代顺序吗?

python - 什么 Series 方法取代了 searchsorted?

python - Pygame闪烁

python - Pandas:如何在不重复项目轴的情况下连接两个面板(即像数据帧中的列)?

pandas - 使用日期时间列过滤 Pandas DataFrame 会引发错误

python - 在 Pandas 数据框中转置一组数据

python - 在 pandas 中,如何将行转换为列并在之后分配行的值?

python - 从python中的数据框行获取最大值

python - 从不同的文件运行单元测试