[英]Comparing date columns between two dataframes
我正在處理的項目要求我找出自上次處理以來哪個“項目”已更新。 為此,我有兩個數據框,它們都包含三列,最后一列是表示上次更新項目的日期。 第一個數據框來自對記錄“項目”更新日期的數據庫表的查詢。 第二個是元數據,我將自己存儲在不同的表中,關於我的應用程序部分處理項目的最后一次。
我想我已經走了很遠,但我遇到了以下錯誤,請參閱下面提供的代碼:
lastmatch = pd.DataFrame({
'projectid': ['1', '2', '2', '3'],
'stage': ['c', 'c', 'v', 'v'],
'lastmatchdate': ['2020-08-31', '2013-11-24', '2013-11-24',
'2020-08-31']
})
lastmatch['lastmatchdate'] = pd.to_datetime(lastmatch['lastmatchdate'])
processed = pd.DataFrame({
'projectid': ['1', '2'],
'stage': ['c', 'v'],
'process_date': ['2020-08-30', '2013-11-24']
})
processed['process_date'] = pd.to_datetime(
processed['process_date']
)
unprocessed = lastmatch[~lastmatch.isin(processed)].dropna()
processed.set_index(['projectid', 'stage'], inplace=True)
lastmatch.set_index(['projectid', 'stage'], inplace=True)
processed.sort_index(inplace=True)
lastmatch.sort_index(inplace=True)
print(lastmatch['lastmatchdate'])
print(processed['process_date'])
to_process = lastmatch.loc[lastmatch['lastmatchdate'] > processed['process_date']]
我想要實現的結果是一個數據框,其中包含“lastmatchdate”大於項目上次處理日期 (process_date) 的行。 然而這一行:
to_process = lastmatch.loc[lastmatch['lastmatchdate'] > processed['process_date']]
產生ValueError: Can only compare identically-labeled Series objects
。 我認為這可能是我不知道或出錯的語法。
在這種情況下,我期望的輸出是:
lastmatchdate
projectid stage
1 c 2020-08-31
所以具體的問題是:如何獲得僅包含另一個數據幀的行的數據幀,該數據幀的列 a 的(日期時間)值大於另一個數據幀的 b 列。
merged = pd.merge(processed, lastmatch, left_index = True, right_index = True)
merged = merged.assign(to_process = merged['lastmatchdate']> merged['process_date'])
您將獲得以下信息:
process_date lastmatchdate to_process
projectid stage
1 c 2020-08-31 2020-08-31 False
2 v 2013-11-24 2013-11-24 False
您收到ValueError
因為您嘗試比較兩個不同的數據幀,如果要逐行比較兩個數據幀,請先合並它們
lastmatch = pd.DataFrame({
'projectid': ['1', '2', '2', '3'],
'stage': ['c', 'c', 'v', 'v'],
'lastmatchdate': ['2020-08-31', '2013-11-24', '2013-11-24',
'2020-08-31']
})
lastmatch['lastmatchdate'] = pd.to_datetime(lastmatch['lastmatchdate'])
processed = pd.DataFrame({
'projectid': ['1', '2'],
'stage': ['c', 'v'],
'process_date': ['2020-08-30', '2013-11-24']
})
processed['process_date'] = pd.to_datetime(
processed['process_date']
)
df=pd.merge(lastmatch,processed,on=['stage','projectid'])
df=df[
df.lastmatchdate>df.process_date
]
print(df)
projectid stage lastmatchdate process_date
0 1 c 2020-08-31 2020-08-30
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.