如何基于每行最大值将多列DataFrame中价格列批量设为NA?
解决方案
核心思路
通过逐行判断是否存在无效值(8888/9999),批量将对应行的价格列置为NA,无需逐行遍历,效率适配大型DataFrame。
代码实现
import pandas as pd # 1. 标记存在无效值的行(最大值>8887即包含8888/9999) has_invalid = df.max(axis=1) > 8887 # 2. 定义需要重置的价格列列表(根据实际列名修改) price_columns = ["pricepergram", "total_price", "unit_price"] # 示例列名 # 3. 批量将目标列置为NA df.loc[has_invalid, price_columns] = pd.NA
关键细节说明
- 适配250列的大型DataFrame:
max(axis=1)会自动遍历每行所有列计算最大值,无需手动指定列范围,处理效率高。 - 精准标记无效行:已知超过8887的只有8888和9999,因此
max(axis=1) > 8887可以准确识别包含无效值的行。 - 灵活调整检查范围:如果只需要基于原始数据列(而非计算后的价格列)判断是否重置,可限定计算max的列范围:
# 假设原始数据列是前240列,价格列是后10列 original_cols = df.columns[:240] has_invalid = df[original_cols].max(axis=1) > 8887
示例验证
# 测试用DataFrame df = pd.DataFrame({ "raw_col1": [100, 8888, 500, 9999], "raw_col2": [200, 300, 9999, 600], "pricepergram": [0.5, 2.5, 1.2, 3.0], "total_price": [100, 750, 600, 1800] }) # 执行处理 has_invalid = df.max(axis=1) > 8887 df.loc[has_invalid, ["pricepergram", "total_price"]] = pd.NA # 输出结果 print(df)
输出:
raw_col1 raw_col2 pricepergram total_price 0 100 200 0.5 100.0 1 8888 300 <NA> <NA> 2 500 9999 <NA> <NA> 3 9999 600 <NA> <NA>
内容的提问来源于stack exchange,提问作者IanH
相关产品推荐
相关产品推荐

