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

如何在Pandas数据框中按Code分组计算面积的累积百分比

按Code分组计算Dist_km对应面积的累积百分比

嘿,这事儿不难,用Pandas几步就能搞定!我给你捋清楚步骤和代码,你直接套用就行~

先明确需求

你需要对每个code分组,按Dist_km的逻辑顺序(默认是从小到大,毕竟距离区间一般是按近到远划分的),计算每个区间面积占组内总面积的比例,再逐步累积直到占比达到100%。

示例实现步骤

1. 先构造示例数据(你可以替换成自己的真实数据)

import pandas as pd

# 模拟你的数据结构
data = {
    'code': ['M0017', 'M0017', 'M0017', 'M0017', 'M0023', 'M0023', 'M0023'],
    'Dist_km': [0.5, 1.0, 1.5, 2.0, 0.5, 1.0, 1.5],
    '面积': [20, 30, 40, 10, 25, 50, 25]
}
df = pd.DataFrame(data)

2. 核心计算代码

# 第一步:按code分组,组内按Dist_km升序排序(这步很关键,保证累积顺序符合逻辑)
df_sorted = df.groupby('code').apply(lambda x: x.sort_values('Dist_km', ascending=True)).reset_index(drop=True)

# 第二步:计算每个组的面积占比和累积占比
df_result = df_sorted.groupby('code').apply(
    lambda group: group.assign(
        # 计算单条面积占组内总面积的百分比
        面积占比=lambda g: (g['面积'] / g['面积'].sum()) * 100,
        # 计算累积面积占比
        累积面积占比=lambda g: (g['面积'].cumsum() / g['面积'].sum()) * 100
    )
).reset_index(drop=True)

# 可选:如果需要确保只保留到累积占比首次达到100%的行(正常情况下最后一行就是100%)
df_result = df_result.groupby('code').apply(lambda g: g[g['累积面积占比'] <= 100]).reset_index(drop=True)

3. 查看结果(以M0017为例)

运行后,M0017组的结果会是这样:

codeDist_km面积面积占比累积面积占比
M00170.52020.020.0
M00171.03030.050.0
M00171.54040.090.0
M00172.01010.0100.0

一些注意事项

  • 排序不能少:一定要保证每个code组内的Dist_km是按你需要的顺序排列(比如从小到大),不然累积占比的逻辑就完全错了。
  • 适配真实数据:如果你的面积列是绝对值(不是百分比),代码依然有效,因为全程用组内的总面积作为分母计算占比。
  • 控制小数位数:如果需要更精确的小数,比如保留两位,可以在计算时加round(2),比如(g['面积'] / g['面积'].sum()) * 100).round(2)。

内容的提问来源于stack exchange,提问作者Funkeh-Monkeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:08:31