这里的上下文是比较两个列的值——键和日期。如果满足条件,我们现在将创建一个新列,标记为= Y else ">
条件:如果关键字匹配并且日期在df1>日期在2008年,然后";Y"其他">
因此,我们将遍历df1中的所有行,看看键是否与df2中的键匹配,此时我们将检查该行的dateF和date,看看它是否更大,如果是,我们将保存"在新的列标志中。
更新1:在df1中可以有多行具有相同的键和不同的日期
Df1:
您可以使用pandas.Series.gt
比较两个日期pandas.DataFrame.loc
使用布尔掩码创建新列并同时标记它。
df1.loc[df1['Date'].gt(df2['Date']), "Flag"]= "Y"
#输出:
print(df1)
Key Date Another Flag
0 123 2022-03-04 Apple Y
1 321 2022-05-01 Red NaN
2 234 2022-07-08 Green Y
如果你的数据帧大小不同,你可以使用merge:
final=df1.merge(df2,left_on='Key',right_on='Key',how='left')
final.loc[final['DateF'] > final['Date'], "Flag"]="Y"
final=final.drop(['Date'],axis=1)
Key DateF Another Flag
0 123 2022-03-04 Apple Y
1 321 2022-05-01 Red
2 234 2022-07-08 Green Y
这段代码没有答案那么优雅,但它也可以工作:
ref_dates = dict(zip(df2.Key,df2.Date))
df1['Flag'] = ['Y' if date>ref_dates.get(key,'0000-00-00') else '' for key,date in zip(df1.Key,df1.DateF)]
我们首先用df2
中的日期创建一个字典(ref_dates
),然后遍历df1
,将它们与DateF
进行比较。