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

如何使用Pandas根据多条件更新DataFrame中的指定行?

解决DataFrame多条件更新特定行的问题

问题需求

当DataFrame中ID为AA且Date为Q1.22或Q2.22时,将stat列置空,en列设为0,其余行保持不变。

原始数据

ID  Date    stat            en
AA  Q2.22   hi              10
AA  Q2.22   hi              11
AA  Q2.22   hi              11
AA  Q1.22   hi              12
AA  Q1.22   bye             14
BB  Q4.22   bye             14.3
CC  Q3.22   ok              18.4
CC  Q3.22   ok              18.4
CC  Q3.22   ok              18.4

期望结果

ID  Date    stat            en
AA  Q2.22                   0
AA  Q2.22                   0
AA  Q2.22                   0
AA  Q1.22                   0
AA  Q1.22                   0
BB  Q4.22   bye             14.3
CC  Q3.22   ok              18.4
CC  Q3.22   ok              18.4
CC  Q3.22   ok              18.4

当前代码的问题

你的代码存在两处关键错误:

  1. 逻辑条件写法错误:df.Date == 'Q1.22' or 'Q2.22' 不符合pandas布尔索引规则,or不能直接连接单个字符串,且pandas多条件需用按位运算符|(或)/&(与),每个条件需单独判断。
  2. 赋值语法错误:[ 'stat'] = '', ['en'] = 0 是错误的赋值格式,pandas的loc需要将目标列放在一个列表中,对应的值也用列表或字典统一赋值。

修正后的代码

import pandas as pd

# 模拟原始数据
data = {
    'ID': ['AA', 'AA', 'AA', 'AA', 'AA', 'BB', 'CC', 'CC', 'CC'],
    'Date': ['Q2.22', 'Q2.22', 'Q2.22', 'Q1.22', 'Q1.22', 'Q4.22', 'Q3.22', 'Q3.22', 'Q3.22'],
    'stat': ['hi', 'hi', 'hi', 'hi', 'bye', 'bye', 'ok', 'ok', 'ok'],
    'en': [10, 11, 11, 12, 14, 14.3, 18.4, 18.4, 18.4]
}
df = pd.DataFrame(data)

# 多条件更新
condition = (df['ID'] == 'AA') & df['Date'].isin(['Q1.22', 'Q2.22'])
df.loc[condition, ['stat', 'en']] = ['', 0]

print(df)

代码解释

  • 条件优化:用df['Date'].isin(['Q1.22', 'Q2.22'])替代多个==判断,更简洁易维护。
  • 正确赋值:通过loc同时指定条件、目标列,一次性完成stat置空和en设为0的操作,符合pandas索引赋值规范。

内容的提问来源于stack exchange,提问作者Lynn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:15:38