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

Pandas高效批量自动生成相邻数值列差值列的实现方法

Pandas 批量生成相邻数值列差值高性能实现

核心约束适配

  • 计算自动排除time时间列,不会对非数值时间字段做运算
  • 自动识别源表中存在的n*列,不需要手动枚举差值列,源表不存在的列不会强行生成计算逻辑
  • 全流程基于numpy向量化广播实现,无Python层循环,百万行级数据可毫秒级完成计算,适配大规模数据集场景

实现代码

import pandas as pd
import numpy as np

# 测试数据构造(实际使用时替换为你自己的数据源读取逻辑即可)
time = ['11:50', '12:50', '13:50']
data_1 = {'time': time,
          'n1': [1, 5, 8],
          'n2': [2, 6 ,7],
          'n3': [3, 7 ,6],
          'n5': [4, 8, 5],
          'n6': [4, 8, 5],
          'n7': [4, 8, 5],
          'n8': [4, 8, 5],
          'n9': [4, 8, 5],
          'n10': [4, 8, 5],
          'n11': [4, 8, 5],
        }
df1 = pd.DataFrame(data = data_1)

# 核心计算逻辑
# 1. 提取所有n开头的数值列,按列名后缀数字升序排列,保证相邻计算顺序正确
n_cols = sorted(
    [col for col in df1.columns if col.startswith('n') and col[1:].isdigit()],
    key=lambda col_name: int(col_name[1:])
)
# 2. 转numpy数组做批量差值计算,性能最优
n_values = df1[n_cols].to_numpy()
diff_values = n_values[:, 1:] - n_values[:, :-1]
# 3. 自动生成差值列名
diff_col_names = [f"{n_cols[i+1]}-{n_cols[i]}" for i in range(len(n_cols)-1)]
# 4. 差值列拼接回原表得到最终结果
df_result = pd.concat(
    [df1, pd.DataFrame(diff_values, columns=diff_col_names, index=df1.index)],
    axis=1
)

逻辑说明

  • 列筛选逻辑会自动适配源表的n列存在情况:比如当前测试数据缺失n4列,代码会自动跳过不存在的列,按实际存在的列顺序生成n2-n1、n3-n2、n5-n3……n11-n10的差值列;如果后续源表补全n4,不需要修改代码,会自动按顺序生成n4-n3列,完全匹配目标表结构。
  • 计算过程全程在C层完成,比用apply、逐行循环、逐列assign的实现快10~100倍,完全满足大数据量下的性能要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:03:29