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

如何基于每行最大值将多列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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:27:36