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

如何在Python中基于日期条件更新DataFrame列值并清除指定列数据

问题:基于日期条件更新DataFrame多列值

需要根据DataFrame中的日期条件,同时完成两个操作:更新status列的值为'open',并清空对应行的value1和value2列数据。当前代码仅修改了status列,未处理value1和value2。

原始数据

id  date        location    status  value1  value2
CC  1/1/2022    ny          new     12      1
CC  4/1/2022    ny          new     1       1
CC  7/1/2022    ny          new     1       1
CC  10/1/2022   ny          new     1       2
CC  1/1/2023    ny          ok      1       2
CC  4/1/2023    ny          ok      1       2
CC  7/1/2023    ny          ok      1       3
CC  10/1/2023   ny          ok      1       3
BB  1/1/2022    ca          new     1       3
BB  4/1/2022    ca          new     1       3
BB  7/1/2022    ca          new     1       3
BB  10/1/2022   ca          new     12      3
BB  1/1/2023    ca          new     2       3
BB  4/1/2023    ca          new     2       3
BB  7/1/2023    ca          new     2       3
BB  10/1/2023   ca          new     2       3

期望结果

id  date        location    status  value1  value2
CC  1/1/2022    ny          open        
CC  4/1/2022    ny          open        
CC  7/1/2022    ny          open        
CC  10/1/2022   ny          new     1       2
CC  1/1/2023    ny          ok      1       2
CC  4/1/2023    ny          ok      1       2
CC  7/1/2023    ny          ok      1       3
CC  10/1/2023   ny          ok      1       3
BB  1/1/2022    ca          new     1       3
BB  4/1/2022    ca          new     1       3
BB  7/1/2022    ca          new     1       3
BB  10/1/2022   ca          new     12      3
BB  1/1/2023    ca          new     2       3
BB  4/1/2023    ca          new     2       3
BB  7/1/2023    ca          new     2       3
BB  10/1/2023   ca          new     2       3

当前尝试的代码

df.loc[(df.id == 'cc') & (df.date <= '07/01/2022'), 'status']= 'open'

存在的问题

  1. 仅修改了status列,未清空value1和value2
  2. id的匹配值为小写'cc',与数据中的大写'CC'不匹配,会导致筛选失效

解决方案

步骤1:统一日期格式(可选但推荐)

先将date列转为datetime类型,避免字符串比较的格式问题:

import pandas as pd
df['date'] = pd.to_datetime(df['date'])

步骤2:一次性更新多列

通过df.loc同时指定需要修改的列,完成批量更新:

# 定义筛选条件:id为CC且日期不晚于2022-07-01
mask = (df['id'] == 'CC') & (df['date'] <= '2022-07-01')
# 同时更新status为'open',清空value1和value2
df.loc[mask, ['status', 'value1', 'value2']] = ['open', '', '']

如果希望用缺失值而非空字符串,可以将''替换为pd.NA:

df.loc[mask, ['status', 'value1', 'value2']] = ['open', pd.NA, pd.NA]

说明

  • 该方法通过一次loc操作完成多列赋值,效率更高
  • 修正了id匹配的大小写问题,确保筛选出正确的行
  • 若不转datetime类型,需保证日期字符串格式完全一致(比如用'7/1/2022'而非'07/01/2022')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:03:19