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

基于Key匹配与日期比较的双条件为DataFrame生成Flag列的问题

问题分析

需要给df1新增Flag列,规则是当df1与df2的Key匹配,且df1.DateF > df2.Date时标记"Y",否则为空,同时要支持df1中同一Key对应多行不同日期的场景。

你之前的代码存在几个问题:

  • 循环中df1[i]用法错误:i是Key的取值,不是DataFrame的列名,会触发KeyError
  • 未定义变量r,代码无法正常运行
  • 循环遍历唯一Key的方式不符合pandas向量化操作逻辑,效率低且易出错

正确实现方案

以下两种高效实现方式均支持df1中同一Key多行数据的场景:

方法1:合并DataFrame后判断(直观易懂)

先通过Key将df1和df2合并,再根据日期条件生成Flag列,最后保留原df1的列结构:

import pandas as pd

# 生成示例数据
data = [[123, pd.to_datetime('2022-03-04 '),'Apple'],
[321, pd.to_datetime('2022-05-01 '),'Red'],
[234, pd.to_datetime('2022-07-08 '),'Green']]
df1 = pd.DataFrame(data, columns=['Key', 'DateF', 'Another'])

data1 = [[123, pd.to_datetime('2022-03-01 ')],
[321, pd.to_datetime('2022-05-01 ')],
[234, pd.to_datetime('2022-07-01 ')]]
df2 = pd.DataFrame(data1, columns=['Key', 'Date'])

# 按Key合并,仅保留df2的Date列
merged_df = df1.merge(df2, on='Key', how='left')
# 根据日期条件生成Flag列
merged_df['Flag'] = merged_df.apply(lambda row: 'Y' if row['DateF'] > row['Date'] else '', axis=1)
# 保留原df1列+Flag列
result_df = merged_df[['Key', 'DateF', 'Another', 'Flag']]
print(result_df)

方法2:使用字典映射匹配日期(更高效)

先将df2转换为Key到Date的字典,用map给df1匹配对应日期,再通过向量化判断生成Flag:

import pandas as pd

# 生成示例数据
data = [[123, pd.to_datetime('2022-03-04 '),'Apple'],
[321, pd.to_datetime('2022-05-01 '),'Red'],
[234, pd.to_datetime('2022-07-08 '),'Green']]
df1 = pd.DataFrame(data, columns=['Key', 'DateF', 'Another'])

data1 = [[123, pd.to_datetime('2022-03-01 ')],
[321, pd.to_datetime('2022-05-01 ')],
[234, pd.to_datetime('2022-07-01 ')]]
df2 = pd.DataFrame(data1, columns=['Key', 'Date'])

# 将df2转为Key: Date的字典
date_map = df2.set_index('Key')['Date'].to_dict()
# 给df1匹配对应Key的日期
df1['matched_date'] = df1['Key'].map(date_map)
# 向量化判断生成Flag列
df1['Flag'] = df1.apply(lambda row: 'Y' if row['DateF'] > row['matched_date'] else '', axis=1)
# 移除临时辅助列
df1 = df1.drop('matched_date', axis=1)
print(df1)

验证结果

两种方法运行后都会得到预期输出:

KeyDateFAnotherFlag
1232022-03-04AppleY
3212022-05-01Red
2342022-07-08GreenY

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:01:07