python - groupby 和 sum 两列并在 pandas 中设置为一列
问题描述
我有以下数据框:
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。然后我喜欢将 homepoint 和 awaypoint 加起来作为 Points 的名称。
Team Points
A 4
B 0
C 4
D 1
E 4
F 3
我该怎么做?我正在使用以下帖子尝试不同的方法: 链接
但我无法获得我想要的格式。
非常感谢您的建议。
谢谢
泽普。
解决方案
一种简单的方法是创建两个由团队索引的新系列:
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()
with 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 - 获取一个基类的所有子类作为基类的类属性
- github - Travis CI 修改同一分支
- scala - 比较两个数据框中列的值
- c# - 如何将数据从 List 导出到具有不同 CSV 格式的 CSV 文件
- java - Java - 如果条件检查整数数组列表是否包含大于特定值的元素
- excel - (1004) 应用程序定义或对象定义错误
- amazon-web-services - 我应该为任何数据类型使用哪种插槽类型,或者我们说哪个可以接受 AWS lex 中的字符串类型数据
- javascript - 以特定网格布局显示图像:ejs
- react-native - Redux 应用程序中通常如何处理声音?
- reactjs - 使用 Relay 运行时出现 React Native 应用程序错误