python - 根据多个条件过滤数据框

标签 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 范围内的任何开始日期。

最佳答案

您可以使用betweenboolean 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/

相关文章:

Python 版本 (sys.version) 是什么意思?

python - 当batch_size与数据量不匹配时,Keras自定义生成器

python - 所有区域的 AWS Cloudformation 堆栈

python - 没有重复字符的最长子字符串 - 代码在运行期间有效,但在提交同一测试用例时失败

python - 具有行业级约束的 SciPy 投资组合优化

python - Pandas :()之间快速反转?

python - 如何根据本地位置/旋转在 OpenGL 中移动/旋转对象

python - 寻找最大派系并删除节点?

python-3.x - 如何在每个元素列表上用 "_"替换空白-Python

python - 将数据框从宽变为长并应用 map (Python 3.5.1 Pandas)