Удаление строк в DataFrame по условию

Есть примерно такой датафрейм:

df = pd.DataFrame({'column1': ['a', 'b', 'c', 'd'],
                   'time_unix': [int(1659608881), int(1659608180), int(1659604885), int(1659608362)]})
              

Нужно удалить строки, где в ячейке с юникс временем разница с текущим временем составляет больше n секунд. Вроде и просто должно быть, но никак не соображу.


Ответы (1 шт):

Автор решения: CrazyElf

Да, всё довольно просто. Только проще действовать наоборот - оставить в датафрейме записи по обратному условию. Непонятно только разница абсолютная (плюс и минус) или какая должна быть, для абсолютной так:

import pandas as pd
import datetime

df = pd.DataFrame({'column1': ['a', 'b', 'c', 'd'],
                   'time_unix': [int(1659608881), int(1659608180), int(1659604885), int(1659608362)]})
n = 2000
df = df[(datetime.datetime.now().timestamp()-df.time_unix).abs() <= n]
df

Вывод на данный момент:

    column1 time_unix
0   a   1659608881

По дополнительному условию:

df = df[(df.time_unix == 0) | 
        ((datetime.datetime.now().timestamp()-df.time_unix).abs() <= n)]

Обратите внимание, что условия берутся в скобки и используются бинарные операции (в данном случае |), а не логические (or).

→ Ссылка