找到" True"在数据框中并在True

时间:2017-05-31 14:46:15

标签: python pandas boolean

我在数据框中创建了一个以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'

1 个答案:

答案 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