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
相关产品推荐
相关产品推荐

