Установить значение столбца на основе индексированного фильтра даты и времени

1

Я хотел бы заполнить значения столбца на основе дневного фильтра (значения 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.

Заранее спасибо.

Теги:
pandas
datetime
filter

1 ответ

1
Лучший ответ

Используйте 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
  • 1
    Спасибо, попробую завтра и вернусь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню