2015-10-05 134 views
1
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,其中索引是列datetime。我想用2000年1月5日至2000年1月8日的日期(而不仅仅是行数)减少JD列(1)的值。有没有熊猫的命令来做到这一点?我一直在申请玩耍,但不知道如何使用它熊猫数据框减少特定日期之间的行值

回答

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 
+0

尼斯和简单,无需申请。 – Leb

+0

ty @ YS-L,可以解决你的问题。扩展到http://stackoverflow.com/questions/32941009/reduce-column-values-for-leap-years-in-pandas-dataframe – user308827

1

@ YS-L的解决方案有效,但我想我会指出,不需要转换索引类型。以下内容适用于“本机”日期时间对象。例如,选择您想要的行,下面的工作:

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 
+0

ty @Oliver,可以你的soln。被扩展到http://stackoverflow.com/questions/32941009/reduce-column-values-for-leap-years-in-pandas-dataframe – user308827

相关问题