在pandas DataFrame中查找与timestamp对应的行

时间:2014-05-15 15:39:09

标签: python pandas dataframe

我正在尝试找到与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时间戳是否有更通用的方法?

1 个答案:

答案 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