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

Python如何实现pandas DataFrame各列元素减去对应指定索引位置的数值

实现方案

直接利用pandas的广播特性即可实现需求,无需手动遍历列或单独转numpy数组处理,核心代码仅需2行。

完整示例代码

import pandas as pd
import numpy as np

# 初始数据
data = [[1, 10], [2, 20], [3, 30],[4, 40],[5, 50]]
df = pd.DataFrame(data, columns=['column1', 'column2']) 
a = np.array([2,4]) # 各列对应的取值索引

# 核心逻辑
## 取出每列对应索引位置的数值
sub_vals = df.lookup(a, df.columns)
## 广播减法,每列所有元素减去对应数值
df_res = df - sub_vals

print(df_res)

运行输出

column1  column2
0       -2      -40
1       -1      -30
2        0      -20
3        1      -10
4        2        0

高版本兼容方案

如果你使用的是pandas 2.0及以上版本(lookup方法已被移除),可以替换取值逻辑为:

sub_vals = df.to_numpy()[a, np.arange(len(df.columns))]

运算结果完全一致,时间复杂度为O(n),性能优于逐列遍历处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:57:04