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

如何为现有DataFrame添加相邻列差值计算列?

嘿,这个需求其实不用新建DataFrame再合并,直接在原数据上操作就很方便,而且能完美实现你要的效果,我给你几种方案参考:

1. 手动生成差值列(适合少量列的情况)

先构造你的示例DataFrame:

import pandas as pd

data = {
    'Name': ['A', 'B'],
    0: [3, 5],
    1: [1, 4],
    2: [0, 1]
}
df = pd.DataFrame(data)

然后直接计算并添加d1和d2列,把数值和计算式拼接成字符串:

# 计算d1:0列减1列
df['d1'] = df.apply(lambda row: f"{row[0]-row[1]}(={row[0]}-{row[1]})", axis=1)
# 计算d2:1列减2列
df['d2'] = df.apply(lambda row: f"{row[1]-row[2]}(={row[1]}-{row[2]})", axis=1)

运行后就能得到你想要的结果:

Name  0  1  2       d1       d2
0    A  3  1  0  2(=3-1)  1(=1-0)
1    B  5  4  1  1(=5-4)  3(=4-1)

2. 批量生成差值列(适合多列场景)

如果你的DataFrame有很多数值列,手动写每一列太麻烦,可以用循环批量生成:

# 筛选出数值列(排除Name列)
num_cols = [col for col in df.columns if col != 'Name']

# 循环生成差值列
for idx in range(len(num_cols)-1):
    col_left = num_cols[idx]
    col_right = num_cols[idx+1]
    df[f'd{idx+1}'] = df.apply(lambda row: f"{row[col_left]-row[col_right]}(={row[col_left]}-{row[col_right]})", axis=1)

这样不管你有多少个数值列,都能自动生成对应的差值列,非常灵活。

3. 矢量化优化(大数据量推荐)

如果你的数据量很大,apply方法的效率可能不够高,这时候可以用矢量化操作提速,避免逐行遍历:

df['d1'] = (df[0] - df[1]).astype(str) + "(=" + df[0].astype(str) + "-" + df[1].astype(str) + ")"
df['d2'] = (df[1] - df[2]).astype(str) + "(=" + df[1].astype(str) + "-" + df[2].astype(str) + ")"

这种方式利用Pandas的矢量化计算,速度会比apply快很多,适合处理大规模数据。

比起你之前尝试的新建DataFrame再合并的方式,这些方法直接在原DataFrame上操作,代码更简洁,也不会出现合并时的索引对齐问题,是更优的实现方案~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:45:32