Python Pandas如何仅对指定列逐行减去另一列的数值
实现代码
你可以直接通过pandas的列筛选+按行减法实现,不需要手动遍历行,核心是正确指定减法的对齐方向:
import pandas as pd # 构造示例数据(你实际使用时直接读取自己的df即可,这部分可以删掉) data = { 'Area': [22,45,67,54,21], '1': [54,36,34,35,27], '2': [33,54,29,19,39], '3': [46,32,11,22,43], '4': [23,14,14,45,22], 'Select': [4,1,3,2,3], 'Value': [23,36,11,19,43] } df = pd.DataFrame(data) # 1. 筛选列名为数字的目标列 # 写法1:自动筛选所有列名是数字的列(适配列数变化的场景) num_cols = df.columns[pd.to_numeric(df.columns, errors='coerce').notna()] # 写法2:如果数字列固定是1/2/3/4,直接写更简单: # num_cols = ['1', '2', '3', '4'] # 2. 对目标列逐行减去对应行的Value值,axis=0表示按行方向对齐计算 df[num_cols] = df[num_cols].sub(df['Value'], axis=0)
运行后输出的df就是你需要的结果。
关键说明
- 列筛选的两种写法可以根据你的实际场景选:如果后续数字列的数量会增加/减少,用自动筛选的写法更灵活;如果列固定,直接写列名列表不容易出错。
sub方法的axis=0是核心参数:默认pandas做列对齐减法,加了这个参数后会逐行取Value的值,对该行所有目标列做减法,符合你的需求。
内容的提问来源于stack exchange,提问作者LostinSpatialAnalysis
相关产品推荐
相关产品推荐

