使用Pandas按列值过滤

时间:2018-09-20 13:09:22

标签: python pandas filtering

我在熊猫中有一个日期数据框,我想对其进行过滤,以使'date_id'在'start_date'和'end_date'之间

     date_id    start_date  end_date
0   2010-06-04  2008-08-01  2008-09-26
1   2010-06-04  2008-08-01  2008-09-26
2   2010-06-04  2008-08-01  2008-09-26
3   2010-06-04  2008-08-26  2008-10-26
4   2010-06-04  2010-05-01  2010-09-26
5   2010-06-04  2008-08-01  2008-09-26
6   2010-06-04  2008-08-01  2008-09-26
7   2010-09-04  2010-08-01  2010-09-26

我尝试使用下面的代码:

df[(df['date_id'] >= df['start_date'] & df['date_id']<= df['end_date')]

上面的代码导致键错误。我是熊猫新用户,所以任何帮助/文档都将对您有所帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用between

df['date_id'].between(df['start_date'],df['end_date_y'])

并进行过滤,只需使用.loc

df.loc[df['date_id'].between(df['start_date'],df['end_date_y'])]


     date_id start_date end_date_y
4 2010-06-04 2010-05-01 2010-09-26
7 2010-09-04 2010-08-01 2010-09-26

答案 1 :(得分:1)

我认为需要将列名更改为python -m pip install libtiff并添加end_date_y,因为运算符优先级:

()

或使用between

df1 = df[(df['date_id'] >= df['start_date']) & (df['date_id']<= df['end_date_y'])]

性能

取决于行数和匹配行数,因此是对真实数据的最佳测试。

df1 = df[df['date_id'].between(df['start_date'], df['end_date_y'])]
print (df1)
     date_id start_date end_date_y
4 2010-06-04 2010-05-01 2010-09-26
7 2010-09-04 2010-08-01 2010-09-26

答案 2 :(得分:1)

您也可以将query用作:

df.query("start_date <= date_id <=  end_date_y")

    date_id     start_date  end_date_y
4   2010-06-04  2010-05-01  2010-09-26
7   2010-09-04  2010-08-01  2010-09-26