我有以下数据框:
import pandas as pd
data = pd.DataFrame()
data['Home'] = ['A','B','C','D','E','F']
data['HomePoint'] = [3,0,1,1,3,3]
data['Away'] = ['B','C','A','E','D','D']
data['AwayPoint'] = [0,3,1,1,0,0]
我想按列['Home','Away']分组,并将名称更改为Team。然后,我喜欢将归宿和离去点的总和称为“点”。
Team Points
A 4
B 0
C 4
D 1
E 4
F 3
我该怎么做?
我正在尝试使用以下帖子的不同方法:
Link
但是我无法获得想要的格式。
非常感谢您的建议。
谢谢
齐普
最佳答案
一种简单的方法是创建两个由团队索引的新系列:
home = pd.Series(data.HomePoint.values, data.Home)
away = pd.Series(data.AwayPoint.values, data.Away)
然后,您想要的结果是:
home.add(away, fill_value=0).astype(int)
请注意,
home + away
不起作用,因为F队从未参加比赛,因此对他们来说是NaN。因此,我们将Series.add()
与fill_value=0
一起使用。一种复杂的方法是使用
DataFrame.melt()
:goo = data.melt(['HomePoint', 'AwayPoint'], var_name='At', value_name='Team')
goo.HomePoint.where(goo.At == 'Home', goo.AwayPoint).groupby(goo.Team).sum()
或从另一个角度来看:
ooze = data.melt(['Home', 'Away'])
ooze.value.groupby(ooze.Home.where(ooze.variable == 'HomePoint', ooze.Away)).sum()
关于python - groupby和求和两列并设置为pandas中的一列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51002693/