我正在尝试找到与pandas数据帧中的时间戳对应的行号。我认为我目前正在做的方式会产生模棱两可的结果,并且没有选择正确的行:
idx = pd.DatetimeIndex(freq='d', start='1979-01-01', end='2015-12-30')
df = pd.DataFrame(data=randint(-10, high=20, size=(len(idx),2)), index=idx)
row = abs(df.sum(axis=1)- df.ix['2014-05-30'].sum(axis=1)).values.argmin()
当我检查我的结果时,我得到一个77的行号,它给出了:
df.ix[row]
0 14
1 9
Name: 1979-03-19 00:00:00, dtype: int32
这不是正确的日期本应该是' 2014-05-30'
使用pandas时间戳是否有更通用的方法?
答案 0 :(得分:1)
In [12]: np.random.seed(1234)
In [13]: df = pd.DataFrame(data=randint(-10, high=20, size=(len(idx),2)), index=idx)
如果你真的想要行号
In [14]: df.index.get_loc('2014-05-30')
Out[14]: array([12933])
In [15]: df.iloc[12933]
Out[15]:
0 18
1 8
Name: 2014-05-30 00:00:00, dtype: int64
这是部分字符串索引,请参见此处:http://pandas-docs.github.io/pandas-docs-travis/timeseries.html#datetimeindex-partial-string-indexing;在这种情况下它就像你指定df.loc[Timestamp('2014-05-30')]
一样,因为它完全匹配(例如你有每日频率)
In [16]: df.loc['2014-05-30']
Out[16]:
0 18
1 8
Name: 2014-05-30 00:00:00, dtype: int64