在pandas中,我有一个按时间戳索引的Dataframe。如下表所示:
A B C D
DATE
2018-01-17 157.52 163.74 157.28 159.84
2018-01-16 158.25 159.35 155.93 157.40
2018-01-15 157.15 159.59 156.79 158.86
2018-01-12 158.25 158.62 157.40 157.52
我尝试按索引选择一行,并选择接下来的几行。 (例如,选择两行从2018-01-12开始)。我发现.loc和.iloc都很难完成这样的任务。有没有其他方法可以做到这一点?
答案 0 :(得分:4)
解决方案#1 :使用DataFrame的索引,然后是head(2)
:
df['2018-01-12':].head(2)
解决方案#2 :使用iloc
:
i = df.index.get_loc('2018-01-12')
df.iloc[i:i+2]
奖金解决方案#3 :您似乎正在分析库存数据。也许您对使用滚动窗口可以更有效地完成的事情感兴趣? (移动平均线可能?)考虑使用rolling
,例如计算滚动平均值:
df.rolling(2).mean()
答案 1 :(得分:2)
您应该可以执行以下操作:
date_of_wanted_row = "2018-01-12"
iloc_of_wanted_row = df.index.get_loc(date_of_wanted_row)
return df.iloc[iloc_of_wanted_row: iloc_of_wanted_row + 4]
(但是更明智的变量名称,我假设索引中的日期不是真正的字符串)
答案 2 :(得分:0)
另一种方法,使用numpy.r_。
loc = df.index.get_loc(row)
print(df.loc[np.r_[loc:loc+2], :])
答案 3 :(得分:0)
您可以使用(获取日期之间的值):
df.loc['2018-01-12':'2018-01-14']
或者,获取一月份的所有数据:
df.loc['2018-01']