【发布时间】:2020-11-11 06:53:07
【问题描述】:
假设我有一个如下的数据框:
d = {'name': ['spain', 'greece','belgium','germany','italy'], 'davalue': [3, 4, 6, 9, 3]}
df = pd.DataFrame(data=d)
index name davalue
0 spain 3
1 greece 4
2 belgium 6
3 germany 9
4 italy 3
我想根据名称列中的字符串列表进行聚合和求和。例如,我可能有:southern=['spain', 'greece', 'italy'] 和 northern=['belgium','germany']。
我的目标是使用sum进行聚合,得到:
index name davalue
0 southern 10
1 northen 15
10=3+4+3 和 15=6+9 的位置
我想象过这样的事情:
df.groupby(by=[['spain','greece','italy'],['belgium','germany']])
可能存在。 docs 说
标签或标签列表可以通过 self 中的列传递给分组
但我不确定我是否理解这在语法方面的含义。
【问题讨论】:
-
标签列表将通过像这样传递等于数据框中行数的列表来手动定义您的组。
df.groupby(['southern', 'southern', 'northern', 'northern', 'southern'])['davalue'].sum() -
@ScottBoston,感谢您的澄清。不幸的是,实际数据集中的行数要多得多。但我想我可以按照@Quang Hoang 的建议使用某种
df['name'].map()来构建该列表 -
没错! QuangHoang 解决方案是最好的。我只是向您指出,这就是手动标签列表的样子。
标签: python pandas dataframe aggregate pandas-groupby