基于Pandas中多个列的ID进行求和

时间:2018-02-21 08:34:40

标签: python python-3.x pandas

我有以下问题:

有四个小组,每个小组都分配了一个ID号(1到4)。他们只打一次比赛并获得积分。游戏的结果如下所示:Pandas DataFrame:

+----------------+----------------+-------------+-------------+
| Home Player ID | Away Player ID | Home Points | Away Points |
+----------------+----------------+-------------+-------------+
|              1 |              2 |           3 |           0 |
|              3 |              4 |           1 |           1 |
|              2 |              3 |           3 |           0 |
|              4 |              1 |           3 |           0 |
|              2 |              4 |           1 |           1 |
|              3 |              1 |           1 |           1 |
+----------------+----------------+-------------+-------------+

目的是根据每个玩家的ID来总结每个玩家的积分,无论他们是回家还是离家。

我通过首先为Home创建两个新的DataFrame,然后为Away重命名列名以使它们统一,然后使用pd.concat将它们组合成两个来实现这一目标非常繁琐列:玩家ID和玩家点数。

然而,这似乎是一种非常低效的方法,我希望找到一种更有效的方法!

最终结果如下:

| Player ID | Total Points |
+-----------+--------------+
|         1 |            4 |
|         2 |            4 |
|         3 |            2 |
|         4 |            5 |
+-----------+--------------+

我真的很感激任何帮助/建议,如果有任何问题得到解释,请告诉我!

1 个答案:

答案 0 :(得分:1)

Firat按照split的第一个空格从列创建MultiIndex,然后按stack重新整形,最后汇总sum

df.columns = df.columns.str.split(n=1, expand=True)
df = df.stack(0).groupby('Player ID', as_index=False)['Points'].sum()
print (df)
   Player ID  Points
0          1       4
1          2       4
2          3       2
3          4       5