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

