我想基于python,pandas中的白天过滤器(DateTime值在索引列中)填充列的值。
我面临的问题是我的日期时间已经设置为索引,因此,解决这个问题的“旧方法”不起作用。
到目前为止,对于类似的问题,我正在使用这种方法:
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过滤器设置列的值。
谢谢。
答案 0 :(得分:1)
在日期时间中使用-
代替.
使用DataFrame.loc
:
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