簡體   English   中英

datetime 每日比較,用 NaN 填充月份

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM