我在熊猫中有一个日期数据框,我想对其进行过滤,以使'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')]
上面的代码导致键错误。我是熊猫新用户,所以任何帮助/文档都将对您有所帮助。
答案 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