Python datetime每日比较,用NaN填充月份

Python datetime每日比较,用NaN填充月份,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧。一个包含输入日期的信息,另一个包含公司的报表。我想用NaN填充返回数据框中输入日期之前的所有日期。我通过使用以下代码实现了这一点: 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)

我有两个数据帧。一个包含输入日期的信息,另一个包含公司的报表。我想用NaN填充返回数据框中输入日期之前的所有日期。我通过使用以下代码实现了这一点:

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来填满整个月,而不是只在日期前几天。这意味着,如果数据帧b的输入日期为2015-04-17,则2015-04年数据帧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

我认为你不能用np.NaN值来表示它。它不是必须是一个数组吗?您尝试过[np.NaN]吗?在第一行代码中,使用np.NaN进行均衡是有效的。[np.NaN]很遗憾不起作用。如果有问题,请告诉我