如何按奇偶列规则对Python DataFrame执行列间减法?
按奇偶列分别执行不同减法操作的解决方案
假设你的输入数据如下(模拟示例):
import pandas as pd df = pd.DataFrame({ 'a': [10, 20, 30], 'b': [15, 25, 35], 'c': [5, 15, 25], 'd': [8, 18, 28] }) df2 = pd.DataFrame({ 'w': [2, 3, 4], 'z': [1, 2, 3] })
核心思路
通过列索引的奇偶性拆分df的列,分别对应减去df2的w和z列,最后合并回原列顺序。
实现代码
# 拆分奇偶列:索引从0开始,::2取第0、2、4...列(对应a、c这类奇数列),1::2取第1、3、5...列(对应b、d这类偶数列) odd_columns = df.columns[::2] even_columns = df.columns[1::2] # 处理奇数列:每个元素减去df2对应行的w值,reshape保证维度匹配 processed_odd = df[odd_columns] - df2['w'].values.reshape(-1, 1) # 处理偶数列:每个元素减去df2对应行的z值 processed_even = df[even_columns] - df2['z'].values.reshape(-1, 1) # 按原列顺序合并处理后的结果 final_result = pd.concat([processed_odd, processed_even], axis=1).sort_index(axis=1)
输出结果
a b c d 0 8 14 3 7 1 17 23 12 16 2 26 32 21 25
关键细节说明
- 使用
df.columns[::2]和df.columns[1::2]可以快速拆分奇偶列,不管df有多少列都能自动适配。 - 用
reshape(-1,1)把df2的一维列转成二维数组,确保每行的所有对应列都能正确减去该行的w/z值,避免Pandas广播时的维度不匹配问题。 sort_index(axis=1)保证合并后的列顺序和原df一致,不会出现奇数列全在前、偶数列全在后的情况。
内容的提问来源于stack exchange,提问作者WillH
相关产品推荐
相关产品推荐

