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

使用Pandas的groupby计算admin_2分组的平均面积占比

Pandas计算admin_2分组平均面积占比的正确实现

原始DataFrame

country admin_1 admin_2 year    season_name production  area
A1  B1  C1  1991    Primary 43170   25980
A1  B1  C1  1990    Primary 45624   29820
A1  B1  C1  1989    Primary 56310   31284
A1  B1  C1  1988    Primary 33523   24832
A1  B1  C1  1987    Primary 49388   33479
A1  B1  C1  1986    Primary 36475   27425
A1  B1  C1  1985    Primary 32278   32046
A1  B1  C1  1984    Primary 52073   28929
A1  B1  C1  1983    Primary 51746   32855
A1  B1  C2  1991    Primary 32010   20010
A1  B1  C2  1990    Primary 52704   19520
A1  B1  C2  1989    Primary 65240   18640
A1  B1  C2  1988    Primary 11570   17800
A1  B1  C2  1987    Primary 51282   20350
A1  B1  C2  1986    Primary 25808   19816
A1  B1  C2  1985    Primary 16935   18817
A1  B2  C3  1987    Primary 51282   20350
A1  B2  C3  1986    Primary 25808   19816
A1  B2  C3  1985    Primary 16935   18817

需求说明

  • 第一步:计算每个admin_2分组(按country维度划分)在所有年份的平均面积
  • 第二步:计算各admin_2平均面积占所属country下所有admin_2平均面积总和的比例

当前代码问题

你尝试的代码:

df['area_percentage'] = df.groupby(['country', 'admin_2'])['area'].apply(lambda x: x / x.sum())

实现的是每个admin_2分组内单一年份面积占该分组总面积的比例,和需求完全不符。

正确实现步骤与代码

步骤分解

  1. 计算每个country-admin_2组合的平均面积
  2. 基于country分组,计算每个admin_2平均面积的占比
  3. 将计算好的占比合并回原DataFrame

代码实现

# 步骤1:计算每个country-admin_2的平均面积
admin2_avg_area = df.groupby(['country', 'admin_2'])['area'].mean().reset_index(name='avg_area')

# 步骤2:计算每个admin_2平均面积在所属country内的占比
admin2_avg_area['area_percentage'] = admin2_avg_area.groupby('country')['avg_area'].apply(
    lambda x: x / x.sum()
)

# 步骤3:将占比合并回原DataFrame
df = df.merge(admin2_avg_area[['country', 'admin_2', 'area_percentage']], 
              on=['country', 'admin_2'], how='left')

结果说明

执行后,原DataFrame会新增area_percentage列,每个admin_2分组下的所有行将对应相同的占比值,该值为该admin_2的平均面积占所属country内所有admin_2平均面积总和的比例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:06:16