Pandas DataFrame如何引用存储在列内的其他列名执行行级计算
问题原因
你原先的写法df[df["MaxColumn"]] += 1 会把MaxColumn列的所有值当做列名,选中对应整列全部加1,完全不符合每行仅修改对应最大值单元格的需求,要么结果错误要么直接报KeyError。
实现方法
方法1:行遍历法(易读,适合小数据量)
直接对每行操作,找到对应列加1即可,代码易理解:
def add_max_val(row): row[row['MaxColumn']] += 1 return row df = df.apply(add_max_val, axis=1)
方法2:向量化索引法(高效,适合百万级以上大数据量)
用Numpy高级索引直接定位目标单元格修改,无循环性能更高:
import numpy as np # 获取每行目标列的数字索引 col_index = df.columns.get_indexer(df['MaxColumn']) # 生成行索引 row_index = np.arange(len(df)) # 对应位置直接加1 df.values[row_index, col_index] += 1
验证结果
用你提供的示例数据运行后,输出结果和你期望的完全一致:
Level1 Level2 Level3 MaxColumn 1 1.5 0.3 0.1 Level1 2 0.2 0.1 1.6 Level3
内容的提问来源于stack exchange,提问作者JustLearning
相关产品推荐
相关产品推荐

