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

基于两列唯一值创建新列:Pandas按组计算Ca-Cb

Pandas按分组计算固定差值并填充整组

需求说明

现有包含A、B、C列的DataFrame,B列唯一值为'a'、'b'、'c'。需要创建新列D:按A列的每个分组,计算该组内B='a'对应的C值(记为Ca)减去B='b'对应的C值(记为Cb),并将计算得到的差值填充至该分组的所有行。

示例数据

import pandas as pd
data = {'A': ['X', 'X', 'X', 'Y', 'Y', 'Y', 'Z', 'Z', 'Z'], 
        'B': ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b' , 'c'],
        'C': [10,   20,  7,   30,  25,  7,   60,  50,   7],
        }
df = pd.DataFrame(data)

实现方法

方法一:使用groupby.transform直接计算

利用分组转换的特性,在每个分组内提取目标值计算差值,自动填充整组:

df['D'] = df.groupby('A').transform(
    lambda group: group[group['B'] == 'a']['C'].iloc[0] - group[group['B'] == 'b']['C'].iloc[0]
)

方法二:透视表计算差值后合并

先通过透视表生成每个分组的差值,再合并回原DataFrame:

# 生成每个A分组的Ca - Cb差值
diff_table = df.pivot(index='A', columns='B', values='C').eval('a - b').reset_index(name='D')
# 合并到原表
df = df.merge(diff_table, on='A', how='left')

结果验证

执行代码后,得到的DataFrame与预期一致:

# 输出结果
print(df)
"""
   A  B   C   D
0  X  a  10 -10
1  X  b  20 -10
2  X  c   7 -10
3  Y  a  30  -5
4  Y  b  25  -5
5  Y  c   7  -5
6  Z  a  60  10
7  Z  b  50  10
8  Z  c   7  10
"""

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:00:59