目前我有一个名为
的变量Date: "2016-07-01"
我正在努力使我目前拥有的数据框在给定日期开始。我目前使用的方法是:
given base df with many dates and prices at the time,
dfmain = df.loc[Date:]
然而,当我打印输出时,它实际上只是从索引 202 开始:
Index Date Price
202 2008-11-21 37.88
203 2008-11-28 42.70
204 2008-12-05 48.28
205 2008-12-12 51.34
206 2008-12-19 51.30
207 2008-12-26 51.78 #etc...
当我将 Date 更改为 2076-01-02 之类的东西时,它从索引 208 开始。我想知道是否有一种方法可以实现它,所以它需要完整的日期并从那里开始,而不是 df.loc 计算日期的前三个数字并将其设置为起始索引。
请您参考如下方法:
我认为首先需要按 Date 列将 set_index 设置为 DateTimeindex,以便按标签选择 DataFrame.loc :
print (df.index)
Int64Index([202, 203, 204, 205, 206, 207], dtype='int64', name='Index')
#if necessary convert to datetime
#df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date')
print (df.index)
DatetimeIndex(['2008-11-21', '2008-11-28', '2008-12-05', '2008-12-12',
'2008-12-19', '2008-12-26'],
dtype='datetime64[ns]', name='Date', freq=None)
Date = "2008-12-01"
dfmain = df.loc[Date:]
print (dfmain)
Price
Date
2008-12-05 48.28
2008-12-12 51.34
2008-12-19 51.30
2008-12-26 51.78
另一个解决方案应该是使用 boolean indexing或 query :
Date = "2008-12-01"
dfmain = df[df['Date'] >= Date]
#dfmain = df.query('Date >= @Date')
print (dfmain)
Date Price
Index
204 2008-12-05 48.28
205 2008-12-12 51.34
206 2008-12-19 51.30
207 2008-12-26 51.78
