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

2024-07-04 09:13:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我想根据name列中的字符串列表进行聚合和求和。例如,我可能有: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']])

可能存在。这个docs

A label or list of labels may be passed to group by the columns in self

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


Tags: 数据namedataframedfdataindexbypd
3条回答

一种方法是使用^{}并将结果用作grouper:

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
df["regional_group"]=df.apply(lambda x: "north" if x["home_team_name"] in ['belgium','germany'] else "south",axis=1)

您将创建一个新列,以后可以通过该列进行grouppy

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

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

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

相关问题 更多 >

    热门问题