Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于Pandas中多个列的ID求和_Python_Python 3.x_Pandas - Fatal编程技术网

Python 基于Pandas中多个列的ID求和

Python 基于Pandas中多个列的ID求和,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有以下问题: 共有四个团队,每个团队都分配了一个ID号(1到4)。他们只玩一次就可以得分。奥运会的结果在熊猫数据框中,如下所示: +----------------+----------------+-------------+-------------+ | Home Player ID | Away Player ID | Home Points | Away Points | +----------------+----------------+-------------+-------

我有以下问题:

共有四个团队,每个团队都分配了一个ID号(1到4)。他们只玩一次就可以得分。奥运会的结果在熊猫数据框中,如下所示:

+----------------+----------------+-------------+-------------+
| 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将他们的积分相加,无论他们是在主场还是客场

我以一种非常零散的方式实现了这一点,首先为主场创建了两个新的数据帧,然后为客场创建了两个新的数据帧,重命名列名,使其统一,然后使用
pd.concat
将它们组合成两个列:球员ID和球员积分

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

最终结果如下所示:

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

我真的很感激任何帮助/建议,如果有什么解释不好的,请让我知道

Firat按第一个空格by从列创建
多索引
,然后按重塑,最后聚合
总和

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