首页 > 解决方案 > Groupby和具有相同值的多列的总和

问题描述

我正在研究 Pandas 数据框并具有以下数据框:

data =pd.DataFrame()
data['HomeTeam'] = ['A','B','C','D','E']
data['AwayTeam'] = ['E','D','A','B','C']
data['HomePoint'] = [1,3,0,1,3]
data['AwayPoint'] = [1,0,3,1,0]
data ['Match']  = data['HomeTeam'].astype(str)+' Vs '+data['AwayTeam'].astype(str)
# I want to duplicate the match
Nsims = 2
data_Dub =pd.DataFrame((pd.np.tile(data,(Nsims,1))))
data_Dub.columns = data.columns
# Then I will assign the stage of the match
data_Dub['SimStage'] = data_Dub.groupby('Match').cumcount()

我想要做的是将每个团队获得的 homepoint 和 awaypoint 相加并将其保存到新的数据框中。我的新数据框如下所示:

在此处输入图像描述

这意味着将为同一团队添加 Homepoint 和 awaypoint,因为我在数据框中有 5 个团队。任何人都可以建议如何做到这一点。

我使用了以下代码,但它不起作用。

Point =  data_Dub.groupby(['SimStage','HomeTeam','AwayTeam])['HomePoint','AwayPoint'].sum()

谢谢。

标签: pythonpandasgroup-by

解决方案


sum您可以分别聚合HomeTeamAwayTeam,然后使用add、 last sort_indexreset_index来自 的列MultiIndex、更改列名以及必要时列的顺序:

a = data_Dub.groupby(['AwayTeam', 'SimStage'])['AwayPoint'].sum()
b = data_Dub.groupby(['HomeTeam', 'SimStage'])['HomePoint'].sum()
s = a.add(b).rename('Point')

df = s.sort_index(level=[1, 0]).reset_index().rename(columns={'AwayTeam':'Team'})
df = df[['Team','Point','SimStage']]
print (df)
  Team  Point  SimStage
0    A      4         0
1    B      4         0
2    C      0         0
3    D      1         0
4    E      4         0
5    A      4         1
6    B      4         1
7    C      0         1
8    D      1         1
9    E      4         1

推荐阅读