Pandas数据框架建筑汇总表

2024-09-29 23:30:51 发布

您现在位置:Python中文网/ 问答频道 /正文

示例df:

id home away winner loser winner_score loser_score
0  A    B    A      B     20            10
1  C    D    D      C     20            5
2  A    D    D      A     30            0

我的目标是建立一个赢/输/赞成/反对的表格。最终结果:

^{tb1}$

我可以使用groupby('winner/loser')来获得胜利和失败,但无法正确地groupby来获得总分(和平均值,但这非常相似)。我的主要问题是当一支球队从来没有赢过一场比赛时,我会以南斯结束

我现在的方法是:

by_winner = df.groupby('winner').sum()
by_loser = df.groupby('loser').sum()

overall_table['score_for'] = by_winner.score + by_loser.score

我也不知道该如何表达这个问题,但我希望能够从一条线=一场比赛的概念来运行这些统计数据,但我不知道如何按赢家和输家分组,以便一次得到所有球队的汇总结果


Tags: id示例目标dfhomeby表格score
1条回答
网友
1楼 · 发布于 2024-09-29 23:30:51

让我们试试:

counts = pd.get_dummies(df[['winner','loser']].stack()).sum(level=1).T


winner_score = (df.groupby('winner')[['winner_score','loser_score']].sum()
   .rename(columns={'winner_score':'for', 'loser_score':'against'})
)

loser_score = (df.groupby('loser')[['winner_score','loser_score']].sum()
   .rename(columns={'winner_score':'against', 'loser_score':'for'})
)

pd.concat((counts, winner_score.add( loser_score, fill_value=0) ), axis=1)

输出:

   winner  loser  against   for
A       1      1     40.0  20.0
B       0      1     20.0  10.0
C       0      1     20.0   5.0
D       2      0      5.0  50.0

相关问题 更多 >

    热门问题