基于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)
验证结果
两种方法运行后都会得到预期输出:
| Key | DateF | Another | Flag |
|---|---|---|---|
| 123 | 2022-03-04 | Apple | Y |
| 321 | 2022-05-01 | Red | |
| 234 | 2022-07-08 | Green | Y |
内容的提问来源于stack exchange,提问作者simpleboi
相关产品推荐
相关产品推荐

