Отфильтруйте кадр данных на основе сегодняшней даты и других условий в pandas - PullRequest
1 голос
/ 13 января 2020

У меня есть фрейм данных, как показано ниже

Date                        Status                    Price
2019-10-07 10:24:51         Yes                       20
2019-10-07 10:27:56         No                        50
2020-01-13 12:27:54         No                        40
2020-01-13 10:27:50         Yes                       80
2020-01-13 12:28:52         Yes                       45

Из приведенных выше данных я хотел бы отфильтровать данные на основе текущей даты с точки зрения дня и статуса == Да.

Примечание: я должен запускать это ежедневно, основываясь на дне сегодняшнего времени.

Ожидаемый результат:

Date                        Status                    Price
2020-01-13 10:27:50         Yes                       80
2020-01-13 12:28:52         Yes                       45

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Используйте boolean indexing с датами сравнения, созданными Series.dt.date с сегодняшним днем ​​date с, и маской цепи при сравнении Yes значений:

df['Date'] = pd.to_datetime(df['Date'])

df = df[df['Date'].dt.date.eq(pd.to_datetime('now').date()) & df['Status'].eq('Yes')]

#in last versions of pandas is possible compare dates with today datime
df = df[df['Date'].dt.date.eq(pd.to_datetime('now')) & df['Status'].eq('Yes')]
print (df)
                 Date Status  Price
3 2020-01-13 10:27:50    Yes     80
4 2020-01-13 12:28:52    Yes     45

Деталь :

print (pd.to_datetime('now'))
2020-01-13 07:42:02.592142

print (pd.to_datetime('now').date())
2020-01-13
1 голос
/ 13 января 2020

Вы можете использовать:

#df['Date']=pd.to_datetime(df['Date']) if needed convert to datetime first
df[df['Date'].dt.date.eq(pd.to_datetime('today')) & df['Status'].eq('Yes')]

                 Date Status  Price
3 2020-01-13 10:27:50    Yes     80
4 2020-01-13 12:28:52    Yes     45
...