我必须检查日期列是否在范围内。特别是,我必须检查它是否包含在另一个日期+/- n天给出的范围内。假设我的数据框是:
import pandas as pd
d = {
'date1': ['2019-09-11', '2019-09-12', '2019-08-02'],
'date2': ['2019-10-11', '2019-09-24', '2019-11-11']
}
df = pd.DataFrame(d)
如果(date2-5天)
答案 0 :(得分:2)
使用between
加上和减去5天的时间变化,并按boolean indexing
进行过滤:
d = {
'date1': ['2019-09-11', '2019-09-12', '2019-08-02'],
'date2': ['2019-09-14', '2019-09-08', '2019-11-11']
}
#changed data for match
df = pd.DataFrame(d)
print (df)
date1 date2
0 2019-09-11 2019-09-14
1 2019-09-12 2019-09-08
2 2019-08-02 2019-11-11
c = ['date1','date2']
df[c] = df[c].apply(pd.to_datetime)
a = df['date2'] - pd.Timedelta(5, unit='d')
b = df['date2'] + pd.Timedelta(5, unit='d')
df = df[df['date1'].between(a, b, inclusive=False)]
print (df)
date1 date2
0 2019-09-11 2019-09-14
1 2019-09-12 2019-09-08
使用DataFrame.query
的另一种解决方案:
df = df.query('@start < date1 < @end')
print (df)
date1 date2
0 2019-09-11 2019-09-14
1 2019-09-12 2019-09-08