我有一个数据框df
,它的头部看起来像:
Shop Opening date
0 London NaT
22 Brighton 01/03/2016
27 Manchester 01/31/2017
54 Bristol 03/31/2017
69 Glasgow 04/09/2017
我还有一个变量 startPeriod
,它设置为 1/04/2017 日期,endPeriod
变量的值为 30/06/17
我正在尝试基于df
创建一个新的数据框,过滤掉任何没有日期的行(因此删除Opening date
为NaT的任何行)并过滤掉开始日期在 startPeriod 和 endPeriod 之间的任何行。因此,在上面的示例中,我将留下以下新数据框:
Shop Opening date
22 Brighton 01/03/2016
69 Glasgow 04/09/2017
我尝试使用以下方法过滤掉“NaT”:
df1 = df['Opening date '] != 'NaT'
但我不确定如何过滤掉 startPeriod
/endPeriod
范围内的任何开始日期。
最佳答案
您可以使用between
与 boolean indexing
:
df['date'] = pd.to_datetime(df['date'])
df = df[df['date'].between('2016-03-01', '2017-04-05')]
print (df)
Shop Opening date
2 27 Manchester 2017-01-31
3 54 Bristol 2017-03-31
我认为过滤掉 NaN
是没有必要的,但如果需要的话,它会链接新的条件:
df = df[df['date'].between('2016-03-01', '2017-04-05') & df['date'].notnull()]
关于python - 根据多个条件过滤数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47651714/