根据多个条件过滤数据框架

时间:2017-12-05 10:47:13

标签: python pandas

我有一个数据框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范围内的任何开放日期。

2 个答案:

答案 0 :(得分:1)

您可以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()]

答案 1 :(得分:0)

首先,请注意df['Opening date ']

中的日期空格

试试这个解决方案:

df1 = df[df['Opening date'] != 'NaT']

如果你创建一个你正在制作的子集的副本

会好得多
df1 = df[df['Opening date'] != 'NaT'].copy()