[英]datetime daily comparison, fill month with NaN
我有兩個數據框。 一個包含有關進入日期的信息,另一個包含來自公司的回報。 我想在輸入日期之前用 NaN 填寫返回 dataframe 中的所有日期。 我通過使用以下代碼實現了這一點:
a.head(4)
date RET Company
0 2015-04-16 1.764052 A
1 2015-04-17 0.400157 A
2 2015-04-18 0.978738 A
3 2015-04-19 2.240893 A
b.head(4)
Entry Company
0 2015-04-17 A
1 2017-04-03 B
2 2018-04-04 C
3 2011-03-01 D
a['RET'][a['date'] < b["Entry"].iloc[0])] = np.NaN
但現在我想用 NaN 填充整個月,而不僅僅是日期前的幾天。 這意味着如果 dataframe b 的輸入日期為 2015-04-17,那么 2015-04 從 dataframe a 的所有返回都需要用 NaN 填充。 我試過類似的東西:
a['RET'][a['date'].strftime("%Y%m") < b["Entry"].iloc[i].strftime("%Y%m"))] = np.NaN
但它沒有用。 任何建議如何做到這一點? 提前致謝
我通過一次合並和仔細檢查來解決
a = pd.DataFrame({'RET':[123,134,321,789,761,812],
'DATE':['2015-03-22','2015-04-15','2015-04-16','2015-04-17',
'2017-03-25','2017-04-02'],
'COMPANY':['A','A','A','A','B','B']})
b = pd.DataFrame({'ENTRY':['2015-04-17','2017-04-03'],
'COMPANY':['A','B']})
a['DATE'] = pd.to_datetime(a['DATE'])
b['ENTRY'] = pd.to_datetime(b['ENTRY'])
b['ENTRY_month'] = b['ENTRY'].apply(lambda x: x.strftime('%Y-%m-01')).astype(np.datetime64)
ab = a.merge(b, on='COMPANY')
a.loc[(ab.ENTRY_month < ab.DATE)&(ab.ENTRY > ab.DATE), 'RET'] = np.nan
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.