Python 根据列表对列进行分类,并将结果汇总

Python 根据列表对列进行分类,并将结果汇总,python,pandas,dataframe,aggregate,pandas-groupby,Python,Pandas,Dataframe,Aggregate,Pandas Groupby,假设我有一个数据帧,如下所示: d={'name':['西班牙'、'希腊'、'比利时'、'德国'、'意大利']、'davalue':[3,4,6,9,3]} df=pd.DataFrame(数据=d) 我想根据name列中的字符串列表进行聚合和求和。例如,我可能有:southern=[‘西班牙’、‘希腊’、‘意大利’]和northern=[‘比利时’、‘德国’] 我的目标是使用sum进行聚合,并获得: index name davalue 0 southern 10 1 nor

假设我有一个数据帧,如下所示:

d={'name':['西班牙'、'希腊'、'比利时'、'德国'、'意大利']、'davalue':[3,4,6,9,3]}
df=pd.DataFrame(数据=d)
我想根据name列中的字符串列表进行聚合和求和。例如,我可能有:
southern=[‘西班牙’、‘希腊’、‘意大利’]
northern=[‘比利时’、‘德国’]

我的目标是使用
sum
进行聚合,并获得:

index name  davalue
0   southern    10
1   northen     15
其中
10=3+4+3
15=6+9

我想象的是:

df.groupby(by=['西班牙','希腊','意大利',['比利时','德国']))
可能存在。说

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


但我不确定我是否理解这在语法方面意味着什么。

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

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
一种方法是使用并将结果用作石斑鱼:

import numpy as np

southern=['spain', 'greece', 'italy']
northern=['belgium','germany']

g = np.select([df.name.isin(southern),
               df.name.isin(northern)],
              ['southern', 'northern'],
              'others')

df.groupby(g).sum()

          davalue
northern       15
southern       10
您将创建一个新列,以后可以通过该列进行grouppy

df.groupby("regional_group")["davavalue"].sum()

标签列表将通过如下方式传递与数据帧中的行数相等的列表来手动定义组
df.groupby(['southern','southern','northern','northern','southern'])['davalue'].sum()
@ScottBoston,感谢您的澄清。不幸的是,数据集中的行比实际数据集中的行多得多。但是我想我可以用@Quang HoangExactly建议的
df['name'].map()
来构建这个列表!广康解决方案是最好的。我刚才向大家指出,手动创建标签列表就是这样的。
df["regional_group"]=df.apply(lambda x: "north" if x["home_team_name"] in ['belgium','germany'] else "south",axis=1)
df.groupby("regional_group")["davavalue"].sum()