Делать что-то другое в зависимости от того, в какой день недели выполняется код - PullRequest
0 голосов
/ 24 сентября 2019

Мне нужно, чтобы панды отбрасывали несколько строк на основе 2 факторов:

  1. Если в понедельник отбрасываются все строки, созданные до пятницы
  2. Если это не понедельник, отбросьте все строки, созданные до вчерашнего дня

Попытка сохранить переменную, содержащую сегодняшнюю дату, и сравнить ее с IFELSE

Daycheck = pd.to_datetime('today', format="%Y/%m/%d").dt.date
df.insert(1, "Today", Daycheck)

df['Date'] = pd.to_datetime(df['Application Date'], format="%Y/%m/%d").dt.date
Yesterday = df['Today'] - timedelta(days=1)
Friday = df['Today'] - timedelta(days=3)

if Daycheck.weekday() == 0:

   df = df.drop(df[df['Date'] < Friday ].index)

else:
   df = df.drop(df[df['Date'] < Yesterday].index)

У нее возникают проблемы при сравнении типов данных, поступающих из отметок времени, с типами в кадре данных, дажехотя я отформатировал тоже самое.Пока не повезло, что это сработало.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Рассматривали ли вы что-то вроде

import pandas as pd
# Only for test
import datetime as dt

dates = pd.date_range(start='2019-09-15', end='2019-09-24')
df = pd.DataFrame({"created_on": dates})

today = pd.datetime.today()

## Test Monday
# today = dt.datetime(2019, 9, 23)

## Test Not Monday
# today = dt.datetime(2019, 9, 24)

if today.weekday() == 0:
    do = pd.DateOffset(days=3)
else:
    do = pd.DateOffset(days=1)

date_lmt = today - do

df = df[df["created_on"] > date_lmt]

0 голосов
/ 25 сентября 2019

Вам не нужно создавать переменные friday и yesterday, используя ваш фрейм данных.Просто использования datetime должно быть достаточно.

import pandas as pd
import datetime as dt

today = dt.date.today()
weekday = today.weekday()

mon = dt.date.today() - dt.timedelta(days=1)
sun = dt.date.today() - dt.timedelta(days=2)
sat = dt.date.today() - dt.timedelta(days=3)
fri = dt.date.today() - dt.timedelta(days=4)
thur = dt.date.today() - dt.timedelta(days=5)
wed = dt.date.today() - dt.timedelta(days=6)

data = {'date':[sun,sat,fri,thur,wed],
        'greeting':['good morning!', 'up n attem!', 'wakey wakey', 'rise and 
        shine', 'zzzzz']
       }

date_df = pd.DataFrame(data)

fri_if_mon = dt.date.today() - dt.timedelta(days=3)
yesterday = dt.date.today() - dt.timedelta(days=1)

print(weekday)
print(date_df)

if(weekday == 0):
    date_df.drop(date_df[date_df['date'] < fri_if_mon].index, inplace = True)
else:
    date_df.drop(date_df[date_df['date'] < yesterday].index, inplace = True)

print(date_df)

Дайте вам этот вывод, когда наступит понедельник.

    date        greeting
0  2019-09-22   good morning!
1  2019-09-21     up n attem!
2  2019-09-20     wakey wakey
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...