python - 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()
谢谢。
解决方案
sum
您可以分别聚合HomeTeam
和AwayTeam
,然后使用add
、 last sort_index
、reset_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