Как удалить определенные значения в столбце после логической индексации? - PullRequest
1 голос
/ 02 апреля 2020

У меня есть df следующим образом:

dates   values
2020-03-29 00:30:00 86.824
2020-03-29 00:45:00 86.923
2020-03-29 01:00:00 87.222
2020-03-29 01:15:00 87.52
2020-03-29 01:30:00 87.918
2020-03-29 01:45:00 88.415
2020-03-29 02:00:00 89.012
2020-03-29 02:15:00 89.807
2020-03-29 02:30:00 90.504
2020-03-29 02:45:00 90.702
2020-03-29 03:00:00 90.205
2020-03-29 03:15:00 88.713
2020-03-29 03:30:00 86.724
2020-03-29 03:45:00 84.636
2020-03-29 04:00:00 83.044
2020-03-29 04:15:00 82.249

Я рассматриваю переход на летнее время и для этого мне нужно удалить только даты в столбце dates и значения в values Не следует удалять столбец.

Поскольку переход на летнее время каждый год происходит в последнее воскресенье марта, я сделал следующее, чтобы получить дату последнего воскресенья марта:

import datetime
currentYear = datetime.datetime.now().strftime("%Y")
march_last_day = currentYear + '-03-31'
march_last_day = datetime.datetime.strptime(march_last_day, '%Y-%m-%d')

ZEIT_UMSTELLUNG_START = march_last_day - \
    datetime.timedelta((march_last_day.weekday() + 1) % 7)
ZEIT_UMSTELLUNG_START = ZEIT_UMSTELLUNG_START.replace(hour=2, minute=00)
ZEIT_UMSTELLUNG_START_2 = ZEIT_UMSTELLUNG_START + datetime.timedelta(hours=1)

значения:

ZEIT_UMSTELLUNG_START.replace(hour=2, minute=00)
Out[13]: datetime.datetime(2020, 3, 29, 2, 0)
ZEIT_UMSTELLUNG_START + datetime.timedelta(hours=1)
Out[14]: datetime.datetime(2020, 3, 29, 3, 0)

Теперь я хочу удалить dates, что l ie между ZEIT_UMSTELLUNG_START (включено) и ZEIT_UMSTELLUNG_START_2 (исключено) из столбца dates и следующих значений должен быть «сдвинут» вверх, но значения в столбце values не должны быть нарушены.

Я сделал:

mask = (df['dates'] >= ZEIT_UMSTELLUNG_START) & (df['dates'] < ZEIT_UMSTELLUNG_START_2)
df = df.loc[mask]

Но он удаляет оба столбца.

Требуемый выход

dates   values
2020-03-29 00:30:00 86.824
2020-03-29 00:45:00 86.923
2020-03-29 01:00:00 87.222
2020-03-29 01:15:00 87.52
2020-03-29 01:30:00 87.918
2020-03-29 01:45:00 88.415
2020-03-29 03:00:00 89.012
2020-03-29 03:15:00 89.807
2020-03-29 03:30:00 90.504
2020-03-29 03:45:00 90.702
2020-03-29 04:00:00 90.205
2020-03-29 04:15:00 88.713
         NaT        86.724
         NaT        84.636
         NaT        83.044
         NaT        82.249

Если вы сравните мой желаемый вывод с оригинальным df, вы увидите, что отметки времени между 02:00:00 и 03:00:00 были удалены, а остальные столбцы были просто сдвинуты или сдвинуты вверх. После сдвига NaN в последних 4 строках столбца dates можно поместить

1 Ответ

1 голос
/ 02 апреля 2020

Попробуйте

df.loc[mask, 'dates'] = pd.NaT
df['dates'] = df['dates'].sort_values(ascending=True).tolist()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...