首页 > 解决方案 > 根据列表对列进行分类并与结果聚合

问题描述

假设我有一个如下数据框:

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+315=6+9

我想象过这样的事情:

df.groupby(by=[['spain','greece','italy'],['belgium','germany']])

可能存在。文档说_

标签或标签列表可以通过 self 中的列传递给 group

但我不确定我是否理解这在语法方面的含义。

标签: pythonpandasdataframeaggregatepandas-groupby

解决方案


我会建立一个字典和地图:

d = {v:'southern' for v in southern}
d.update({v:'northern' for v in northern})

df['davalue'].groupby(df['name'].map(d)).sum()

输出:

name
northern    15
southern    10
Name: davalue, dtype: int64

推荐阅读