Я хотел бы заполнить значения столбца на основе дневного фильтра (значения DateTime находятся в столбце индекса) в python, pandas.
Проблема, с которой я сталкиваюсь, заключается в том, что мои данные уже установлены как индекс, поэтому "старый способ", который я решал по этой проблеме, не работает.
До сих пор для подобных проблем я использовал такой подход:
df.loc[df['filter'] > 0, 'column_value'] = 1
Однако теперь столбец "фильтр" на самом деле является индексом, и я фильтрую его между двумя датами, поэтому в первую очередь не существует логического.
Поэтому я попробовал:
df[df['2017.01.19 12:30:00':'2017.01.19 15:10:00'], "column_value"] = "something"
Но я получаю TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed
ошибкой типа.
Если я попробую: df[df['2017.01.19 12:30:00':'2017.01.19 15:10:00']]
, я получаю Must pass DataFrame with boolean values only
ошибкой.
Поэтому, пожалуйста, помогите мне и дайте мне знать, как установить значение столбца на основе индексированного фильтра DateTime.
Заранее спасибо.
Используйте DataFrame.loc
с datetimes с -
вместо этого .
:
df.loc['2017-01-19 12:30:00':'2017-01-19 15:10:00', "column_value"] = "something"
Образец:
idx = pd.date_range('2017-01-19 12:00:00', '2017-01-19 16:30:00', freq='10T')
df = pd.DataFrame({'column_value': ['a'] * len(idx)}, index = idx)
df.loc['2017-01-19 12:30:00':'2017-01-19 15:10:00', "column_value"] = "something"
print (df)
column_value
2017-01-19 12:00:00 a
2017-01-19 12:10:00 a
2017-01-19 12:20:00 a
2017-01-19 12:30:00 something
2017-01-19 12:40:00 something
2017-01-19 12:50:00 something
2017-01-19 13:00:00 something
2017-01-19 13:10:00 something
2017-01-19 13:20:00 something
2017-01-19 13:30:00 something
2017-01-19 13:40:00 something
2017-01-19 13:50:00 something
2017-01-19 14:00:00 something
2017-01-19 14:10:00 something
2017-01-19 14:20:00 something
2017-01-19 14:30:00 something
2017-01-19 14:40:00 something
2017-01-19 14:50:00 something
2017-01-19 15:00:00 something
2017-01-19 15:10:00 something
2017-01-19 15:20:00 a
2017-01-19 15:30:00 a
2017-01-19 15:40:00 a
2017-01-19 15:50:00 a
2017-01-19 16:00:00 a
2017-01-19 16:10:00 a
2017-01-19 16:20:00 a
2017-01-19 16:30:00 a