Как получить DataFrame по условию < > текущей даты?
Есть DataFrame:
index | date1 | date2 | text1 | text2
1 | 2021-01-20 19:17:02 |2021-01-22 19:15:02 | sadasd| asdasd
2 | 2021-01-22 15:12:02 |2021-01-23 19:15:02 | sadasd| asdasd
3 | 2021-01-23 13:17:02 |2021-01-24 19:15:02 | sadasd| asdasd
4 | 2021-01-24 18:17:02 |2021-01-25 19:15:02 | sadasd| asdasd
Как получить из данного фрейма только те строки, где дата меньше текущей на 3 дня?
Уже пробовал и загонять данные в строку, и выборкой с помощью isin - ничего не помогает.
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
Не совсем понятно, с какими датами сравнивать сегодняшнюю, поэтому я сравниваю с обеими колонками с датами (либо одна, либо другая должны быть больше текущей даты на 3 дня). Разумеется, эти столбцы должны иметь тип datetime64. При ваших исходных данных:
date1 date2 text1 text2
index
1 2021-01-20 19:17:02 2021-01-22 19:15:02 sadasd asdasd
2 2021-01-22 15:12:02 2021-01-23 19:15:02 sadasd asdasd
3 2021-01-23 13:17:02 2021-01-24 19:15:02 sadasd asdasd
4 2021-01-24 18:17:02 2021-01-25 19:15:02 sadasd asdasd
можно сделать так:
today = pandas.to_datetime('today').normalize()
res = df[((today - df["date1"]).dt.days >= 3)|((today - df["date2"]).dt.days >= 3)]
тогда res будет:
date1 date2 text1 text2
index
1 2021-01-20 19:17:02 2021-01-22 19:15:02 sadasd asdasd
Если вам нужно, чтобы обе колонки были на 3 дня старше текущей даты, смените оператор | на &.
Автор решения: MaxU
→ Ссылка
Можно воспользоваться методом DataFrame.query():
thresh = (pd.to_datetime("now") - pd.offsets.Day(3)).floor("D")
res = df.query("date1 < @thresh or date2 < @thresh")
результат:
In [38]: res
Out[38]:
date1 date2 text1 text2
1 2021-01-20 19:17:02 2021-01-22 19:15:02 sadasd asdasd