检查日期列是否在日期范围内 - pandas

4

我需要检查一个日期列是否在一个范围内。特别是,我需要检查它是否包含在另一个日期加减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天) < date1 < (date2 + 5天)

1个回答

15

使用 between 方法,结合加减 5 天的时间差,并通过 布尔索引 进行筛选:

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

如果可以的话,我也想给你的个人简介点个赞。 - kerwei
@kerwei - 不必要的。顺便问一下,如果你查看我的个人资料,你认为编写电子邮件代码是愚蠢的吗?我的想法是防止那些不询问关于熊猫的人联系我。 - jezrael
@kerwei - 谢谢。 - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接