[英]Compare two columns from two different data frame with two conditions
這里的上下文是我正在比較兩列的值——鍵和日期。 如果滿足條件,我們現在將創建一個新列,其中 flag = Y else ""
條件:如果鍵匹配並且 df1 中的日期 > df2 中的日期則“Y”否則“”
因此,我們將遍歷 df1 中的所有行並查看鍵是否與 df2 中的匹配,此時我們將檢查該行的 dateF 和 date 以查看它是否更大,如果是,我們將保存“Y”在新的列標志中。
更新 1:df1 中可以有多個具有相同鍵和不同日期的行
DF1:
鑰匙 | 日期 | 其他 | |
---|---|---|---|
123 | 2022-03-04 | 蘋果 | |
321 | 2022-05-01 | 紅色的 | |
234 | 2022-07-08 | 綠色的 |
DF2:
鑰匙 | 日期 |
---|---|
123 | 2022-03-01 |
321 | 2022-05-01 |
234 | 2022-07-01 |
預期的 O/P: 解釋:正如我們所見,第一行和第三行鍵是匹配的,df1 中的 DateF > df2 中的日期,所以 Y
鑰匙 | 日期 | 其他 | 旗幟 |
---|---|---|---|
123 | 2022-03-04 | 蘋果 | 是 |
321 | 2022-05-01 | 紅色的 | |
234 | 2022-07-08 | 綠色的 | 是 |
創建所有dfs的代碼:
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'])
#df2
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'])
試過這個,但我想我錯了。
for i in df1.Key.unique():
df1.loc[(df1[i] == df2[i]) & (r['DateF'] > df2['Date]), "Flag"] = "Y"
謝謝你!
您可以使用pandas.Series.gt
比較兩個日期,然后使用pandas.DataFrame.loc
和 boolean 掩碼來創建新列並同時對其進行標記。
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
如果您的數據框大小不同,則可以使用合並:
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
進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.