PYTHON:Pandas时间索引范围更改列值

3

我有一个使用12小时频率日期时间索引的数据框:

                    id  mm ls
date            
2007-09-27 00:00:00 1   0   0
2007-09-27 12:00:00 1   0   0
2007-09-28 00:00:00 1   15  0
2007-09-28 12:00:00 NaN NaN 0
2007-09-29 00:00:00 NaN NaN 0
Timestamp('2007-09-27 00:00:00', offset='12H')

我使用列“ls”作为二进制变量,默认值为“0”,使用以下代码实现:
data['ls'] = 0

我有一份日期列表,格式为“2007-09-28”,我希望将所有“ls”值从0更新为1。

                    id  mm ls
date            
2007-09-27 00:00:00 1   0   0
2007-09-27 12:00:00 1   0   0
2007-09-28 00:00:00 1   15  1
2007-09-28 12:00:00 NaN NaN 1
2007-09-29 00:00:00 NaN NaN 0
Timestamp('2007-09-27 00:00:00', offset='12H')

我了解可以使用另一个列变量来完成这个操作,例如:
data.ix[data.id == '1'], ['ls'] = 1

然而,这不能使用日期时间索引。您能告诉我日期时间索引的方法吗?


1
IIUC,“data.loc['2007-09-28','ls'] = 1” 不生效吗? - EdChum
1个回答

2
你有一个日期列表,格式为“2007-09-28”:
days = ['2007-09-28', ...]

然后您可以使用以下方式修改您的df:
df['ls'][pd.DatetimeIndex(df.index.date).isin(days)] = 1

这个方法是可行的,"EdChum" 的评论也是。但是这个答案创建了一个 df 的副本,而不是更新现有的 df。然而,在问题中我没有指定。 - BenP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接