根据索引的日期时间过滤器设置列值

时间:2018-08-01 15:00:33

标签: python pandas datetime filter

我想基于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过滤器设置列的值。

谢谢。

1 个答案:

答案 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