datetime JD
2000-01-01 1
2000-01-02 2
2000-01-03 3
2000-01-04 4
2000-01-05 5
2000-01-06 6
2000-01-07 7
2000-01-08 8
2000-01-09 9
我有上面的dtaaframe,索引是列日期时间。我想使用日期(而不仅仅是行号)从2000年1月5日到2000年1月8日减少JD列(1)中的值。是否有一个pandas命令来执行此操作?我一直在玩申请,但不知道如何使用
答案 0 :(得分:2)
如果索引是DatetimeIndex
,您可以使用此切片表示法来更新相应的行:
df.ix['2000-01-05':'2000-01-08', 'JD'] -= 1
print df
如果没有,您可以先使用以下方法转换索引:
df.index = pd.to_datetime(df.index)
输出:
JD
2000-01-01 1
2000-01-02 2
2000-01-03 3
2000-01-04 4
2000-01-05 4
2000-01-06 5
2000-01-07 6
2000-01-08 7
2000-01-09 9
答案 1 :(得分:1)
@ YS-L的解决方案有效,但我想我指出没有必要转换索引类型。以下内容适用于" native"日期时间对象。例如,要选择所需的行,以下操作:
idx = (df.index >= datetime.datetime(2000, 1, 5)) & (df.index < datetime.datetime(2000, 1, 8))
df.ix[idx, 'JD'] -= 1
或
idx = (df.index >= datetime.datetime(2000, 1, 5)) & (df.index < datetime.datetime(2000, 1, 8))
df.ix[idx, 'JD'] = df[idx].JD - 1