假设我有一个数据框,如下所示:
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说
标签或标签列表可以通过自身中的列传递给分组
但我不确定我是否理解语法的含义。
答案 0 :(得分:3)
我会建立字典和地图:
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
答案 1 :(得分:2)
一种方法可能是使用np.select
并将结果用作分组器:
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
答案 2 :(得分:1)
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()