我有一个包含DatetimeIndex的数据帧。我想创建一个输入,用户将写入日期,然后python将查找第一个经过的月份。
下面是一个示例: df是数据帧的名称
date = input('Enter a date in YYYY-MM-DD format: ')
Enter a date in YYYY-MM-DD format: 2017-01-31我希望python将执行dfdate-1,然后打印结果,这样我就可以得到:
2016-12-31 8.257478e+04如果输入日期已经在索引中,这是可能的,但我正在寻找一种输入不在索引中的方法。
有什么想法吗?提前感谢
发布于 2017-02-16 17:09:49
value在index中的位置似乎需要get_loc,然后iloc才能选择:
pos = df.index.get_loc(d)
print (df.iloc[[pos - 1]])示例:
start = pd.to_datetime('2016-11-30')
rng = pd.date_range(start, periods=10, freq='M')
df = pd.DataFrame({'a': range(10)}, index=rng)
print (df)
a
2016-11-30 0
2016-12-31 1
2017-01-31 2
2017-02-28 3
2017-03-31 4
2017-04-30 5
2017-05-31 6
2017-06-30 7
2017-07-31 8
2017-08-31 9
d = '2017-01-31'
pos = df.index.get_loc(d)
print (df.iloc[[pos - 1]])
a
2016-12-31 1如果date不在index中,则添加method='nearest'
d = '2017-01-20'
pos = df.index.get_loc(d, method='nearest')
print (df.iloc[[pos - 1]])
a
2016-12-31 1但如果需要更一般的解决方案,您必须使用一些条件,如:
d = '2017-11-30'
pos = df.index.get_loc(d, method='nearest')
if pos == 0:
print ('Value less or same as minimal date in DataTimeIndex')
else:
print ('Value nearest less or same as date', df.index[pos])
print ('Previous value', df.iloc[[pos - 1]])https://stackoverflow.com/questions/42269289
复制相似问题