如何在pandas中一次性批量创建多组窗口式配对列差值diff列
Pandas 按相邻两列批量插入差值列实现方案
参考测试数据集
import pandas as pd d = {'col1':[2,4,5,6],'col2':[8,8,6,1],'col3':[1,2,3,4],'col4':[4,4,4,4]} df = pd.DataFrame(d,index=['Item1','Item2','Item1','Item2'])

需求规则
按相邻两列为一组的窗口规则遍历DataFrame所有列,批量生成差值列:
- 第一组计算col1与col2的差值,生成
diff_1列,插入在col2之后 - 第二组计算col3与col4的差值,生成
diff_2列,插入在col4之后 - 按上述规则依次处理所有列组,最终目标数据集结构如下:
d = {'col1':[2,4,5,6],'col2':[8,8,6,1],'diff_1':[-6,-4,1,5],'col3':[1,2,3,4],'col4':[4,4,4,4],'diff_2':[-3,-2,-1,0]} df = pd.DataFrame(d,index=['Item1','Item2','Item1','Item2'])

一次性实现代码
直接运行以下代码即可得到符合要求的结果,无需后续手动调整列顺序:
# 按步长2遍历列索引,逐组计算差值并插入对应位置 for group_id, col_idx in enumerate(range(0, len(df.columns), 2), start=1): col_first = df.columns[col_idx] col_second = df.columns[col_idx + 1] # 按示例规则计算差值:组内第一列减第二列 diff_series = df[col_first] - df[col_second] # 计算插入位置:每组两列后方插入,偏移量为已插入的diff列总数 insert_pos = col_idx + 2 + (group_id - 1) df.insert(loc=insert_pos, column=f'diff_{group_id}', value=diff_series)
逻辑说明:
- 步长设为2遍历列索引,每次取连续两列为一组,不会重复取值
- 用
enumerate直接生成diff列的序号,无需额外做编号计算- 插入位置提前计算了之前插入diff列带来的索引偏移,保证diff列正好落在每组两列的后方,和目标结构完全一致
- 如果需要调整差值计算顺序(比如后一列减前一列),直接修改
diff_series的计算逻辑即可
内容的提问来源于stack exchange,提问作者INGl0R1AM0R1
相关产品推荐
相关产品推荐

