You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于DataFrame列与字典值实现分组统计?

分组统计需求:无需新增列的高效实现

现有数据

DataFrame(df)

Year    Month      Country    Organizer      Participation
2020      1         China     FAO                True
2020      1         Japan     FAO                True
2020      1         France    EU                 False
2020      2         France    FAO                False
2020      2         Japan     FAO                True
2020      2         Germany   EU                 True
2020      2         Finland   EU                 False
2020      2         India     FAO                True
2020      3         Senegal   FAO                True

映射字典(codes)

codes = {
    'Asia': ['China', 'Japan', 'India'],
    'Europe': ['France', 'Germany', 'Finland'],
    'Africa': ['Senegal']
}

需求

按Year、Month、Organizer字段,以及由Country通过codes映射得到的Continent进行分组,统计每组的行数(与Participation字段无关),期望输出:

Year    Month      Organizer    Continent    Number
2020      1         FAO          Asia          2
2020      1         EU           Europe        1
2020      2         FAO          Europe        1
2020      2         FAO          Asia          2
2020      2         EU           Europe        2
2020      3         FAO          Africa        1  

要求:使用无需新增Continent列的简洁高效实现方式。


实现方案

可以先将codes反向生成为「国家→大洲」的映射字典,然后直接在groupby中使用这个映射进行分组,全程不需要新增列:

代码实现

# 反向生成国家到大洲的映射字典
country_to_continent = {country: continent for continent, countries in codes.items() for country in countries}

# 直接分组统计,无需新增列
result = df.groupby(
    [
        'Year',
        'Month',
        'Organizer',
        df['Country'].map(country_to_continent).rename('Continent')  # 直接在groupby中生成分组键并重命名
    ]
).size().rename('Number').reset_index()

print(result)

说明

  1. 反向映射字典country_to_continent把每个国家对应到所属大洲,比原codes更适合直接做字段映射;
  2. 在groupby的参数里,直接对Country列做映射并将结果重命名为Continent,作为分组键之一;
  3. 使用size()统计每组行数,最后重命名为Number并重置索引,得到目标格式的结果。

这种方式避免了修改原DataFrame或新增中间列,逻辑紧凑且效率较高,尤其适合处理大规模数据时减少内存占用。


内容的提问来源于stack exchange,提问作者LJG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:15:29