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

基于Pandas实现:根据df1条件修改df2指定日期的flag值

用Pandas根据另一个DataFrame的条件修改数据

步骤说明

要实现需求,核心是先统一日期格式,再提取目标条件,最后通过布尔索引修改对应数据。

完整代码(可直接运行)

import pandas as pd

# 初始化你的两个DataFrame
df1 = pd.DataFrame({
    'name': ['abc', 'xyz'],
    'date': ['4/11/2023', '2/8/2023'],
    'flag': [1, 0]
})

df2 = pd.DataFrame({
    'name': ['xyz']*8,
    'date': ['2/6/2023', '2/7/2023', '2/8/2023', '2/9/2023', '2/10/2023', '2/11/2023', '2/12/2023', '2/13/2023'],
    'flag': [0, 0, 0, 1, 1, 1, 1, 1]
})

# 1. 把日期列转为datetime类型(必须步骤,否则字符串无法正确比较日期大小)
df1['date'] = pd.to_datetime(df1['date'])
df2['date'] = pd.to_datetime(df2['date'])

# 2. 从df1中提取xyz对应的目标日期
target_date = df1.loc[df1['name'] == 'xyz', 'date'].iloc[0]

# 3. 筛选df2中符合条件的行,修改flag值
df2.loc[(df2['name'] == 'xyz') & (df2['date'] < target_date), 'flag'] = 1

# 查看修改后的df2
print(df2)

代码解释

  • 日期转换:pd.to_datetime()把字符串格式的日期转成Pandas可识别的datetime类型,这样才能进行日期的大小比较。
  • 提取目标日期:用df1.loc[df1['name'] == 'xyz', 'date']筛选出xyz对应的日期行,再用.iloc[0]取出具体的日期值(因为返回的是一个Series,取第一个元素即可)。
  • 修改flag:df2.loc[条件, 'flag'] = 1是Pandas中修改指定行/列的标准写法,这里的条件是name为xyz且date早于目标日期,两个条件用&连接(注意要加括号)。

运行后df2的结果:

name       date  flag
0  xyz 2023-02-06     1
1  xyz 2023-02-07     1
2  xyz 2023-02-08     0
3  xyz 2023-02-09     1
4  xyz 2023-02-10     1
5  xyz 2023-02-11     1
6  xyz 2023-02-12     1
7  xyz 2023-02-13     1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:17:26