我在数据框中创建了一个以np.nan开头的列,然后每次满足某个日期条件时返回True
。接下来,我想重新扫描列中的True
值,并为之前标记为True
的每个X值(变化)标记True
。必须有一个简单的.loc实现,但它正在逃避我。两者结合起来将是理想的。
index = pd.date_range('20170101',periods=10)
main_df = pd.DataFrame(np.random.randn(10,1),index=index)
main_df['EXPIRY'] = np.nan
dates = {datetime(2017, 1, 5), datetime(2017, 1, 9)}
tag_days = 2
#update. this works now
for x in dates:
main_df.loc[x-pd.Timedelta(str(tag_days)+'d'):x , ['EXPIRY']] = 'TRUE'
答案 0 :(得分:1)
让我们试试:
pd.concat([pd.DataFrame({'EXPIRY':'TRUE'},index=pd.date_range(pd.to_datetime(i) - pd.DateOffset(days=tag_days),pd.to_datetime(i))) for i in date]).combine_first(main_df)
输出:
EXPIRY 0
2017-01-01 NaN 2.003359
2017-01-02 TRUE -0.029419
2017-01-03 TRUE -1.582940
2017-01-04 TRUE -0.026711
2017-01-05 TRUE 1.571670
2017-01-06 TRUE -0.394502
2017-01-07 TRUE 1.434229
2017-01-08 TRUE -0.092047
2017-01-09 TRUE -0.520282
2017-01-10 NaN -1.698000