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

如何用Pythonic方式实现Pandas分组条件减法生成新列?

简洁优雅的Pandas实现方案

嘿,这个需求用Pandas的分组+映射操作就能轻松搞定,而且代码简洁可读性强!下面直接上方案和解释:

核心思路

  1. 按A列分组,找到每组中B列值最小的行对应的C列值(我们叫它基准值)
  2. 把每个行的C列值减去对应分组的基准值,得到新列d

实现代码

方法一:字典映射法(可读性拉满)

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'A': ['X', 'X', 'Y', 'Y', 'Y'],
    'B': [3, 1, 5, 2, 4],
    'C': [10, 20, 15, 25, 30]
})

# 第一步:计算每个A分组对应的基准值(B最小时的C值)
base_values = df.groupby('A').apply(lambda g: g.loc[g['B'].idxmin(), 'C']).to_dict()

# 第二步:生成d列
df['d'] = df['C'] - df['A'].map(base_values)

方法二:分组变换法(一行搞定)

如果追求极致简洁,也可以用groupby结合transform,一行代码完成:

df['d'] = df.groupby('A').apply(lambda g: g['C'] - g['C'][g['B'].idxmin()]).reset_index(level=0, drop=True)

示例输出

运行后你的DataFrame会变成这样:

ABCd
X310-10
X1200
Y515-10
Y2250
Y4305

为什么这两种方法优雅?

  • 字典映射法:逻辑清晰,分步操作,新手也能快速理解,而且后续如果需要复用基准值也很方便
  • 分组变换法:代码紧凑,利用Pandas的分组变换自动对齐索引,无需额外处理匹配问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:23:17