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

如何按奇偶列规则对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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:17:31