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

Pandas中按ID分组条件自定义修改DataFrame列值

pandas按ID首年条件调整金额列的实现

用pandas原生的分组变换+条件赋值就能实现,写法简洁且运行效率高,不需要写自定义循环。

核心逻辑

  • 先按ID分组,计算每个ID对应的最早记录年份(首年),把首年值匹配到每一条记录上
  • 筛选出「记录年份等于对应ID首年」且「首年≥2017」的行,直接对这些行的Amount ($)列做加100的操作,其余行数值保持不变

完整代码示例

首先构造和描述一致的测试数据:

import pandas as pd

# 构造示例原始表
df = pd.DataFrame({
    'ID': [1, 1, 1, 2, 2, 2],
    'Year': [2016, 2017, 2017, 2017, 2018, 2019],
    'Amount ($)': [100, 45, 65, 75, 75, 80]
})

执行处理逻辑:

# 给每条记录匹配所属ID的首年
df['id_first_year'] = df.groupby('ID')['Year'].transform('min')

# 对满足条件的记录金额加100
df.loc[(df['Year'] == df['id_first_year']) & (df['id_first_year'] >= 2017), 'Amount ($)'] += 100

# 删除处理用的临时列
df.drop(columns='id_first_year', inplace=True)

处理结果

运行后得到的表完全符合需求:

  • ID1首年为2016<2017,所有记录金额保持原值
  • ID2首年为2017≥2017,其2017年的金额从75调整为175,2018、2019年金额不变

最终表内容:

IDYearAmount ($)
12016100
1201745
1201765
22017175
2201875
2201980

补充说明

  • 该实现是pandas原生向量化操作,即使是百万行级别的数据也能快速跑完,性能远好于逐行遍历、apply逐组运算的写法
  • 自动兼容同ID首年有多笔记录的场景,所有首年的记录都会被正确识别调整,不会遗漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:57:12