Изменить значение столбца, если в пределах временного диапазона - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь изменить значения одного столбца, если они попадают между следующим временем (с 17:00 до 23:00), в противном случае они должны сохранять те же значения. Это мой код:

lclstd['Response KWH/hh (per half hour) ']=lclstd['KWH/hh (per half hour) '].astype(float)

Извлечение времени из столбца даты и времени

lclstd['Time']=pd.to_datetime(lclstd['DateTime']).dt.strftime ('%H:%M:%S')

Назначение ответа только в пиковое время с 17:00 до 23:00

lclstd.loc[(lclstd['Time'] == '17:00:00') | (lclstd['Time'] == '17:30:00') | (lclstd['Time'] == '18:00:00') | (lclstd['Time'] == '18:30:00') | (lclstd['Time'] == '19:00:00') | (lclstd['Time'] == '19:30:00') | (lclstd['Time'] == '20:00:00') | (lclstd['Time'] == '20:30:00') | (lclstd['Time'] == '21:00:00') | (lclstd['Time'] == '21:30:00') | (lclstd['Time'] == '22:00:00') | (lclstd['Time'] == '22:30:00') | (lclstd['Time'] == '23:00:00') , 'Response KWH/hh (per half hour) '] = 0.9*lclstd['Response KWH/hh (per half hour) ']

но я получаю следующую ошибку

ValueError: cannot reindex from a duplicate axis

1 Ответ

0 голосов
/ 08 ноября 2018

pd.Series.dt.time возвращает datetime.time объектов. Таким образом, вы можете выполнить сравнение с помощью pd.Series.between для создания маски. Затем введите loc:

from datetime import time

time1, time2 = time(17), time(23)                # 17:00, 23:00

df['Time'] = pd.to_datetime(df['Time'])          # convert to datetime if necessary
mask = df['Time'].dt.time.between(time1, time2)  # inclusive of boundaries by default

df.loc[mask, 'Response KWH/hh (per half hour) '] *= 0.9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...