如何使用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
当前代码的问题
你的代码存在两处关键错误:
- 逻辑条件写法错误:
df.Date == 'Q1.22' or 'Q2.22'不符合pandas布尔索引规则,or不能直接连接单个字符串,且pandas多条件需用按位运算符|(或)/&(与),每个条件需单独判断。 - 赋值语法错误:
[ '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
相关产品推荐
相关产品推荐

