2012-03-26 47 views
14

數據幀我有:如何使用,以獲得特定日期時間指數之後最接近的單行的Python熊貓

  A B C 
2012-01-01 1 2 3 
2012-01-05 4 5 6 
2012-01-10 7 8 9 
2012-01-15 10 11 12 

我現在使用:

date_after = dt.datetime(2012, 1, 7) 
frame.ix[date_after:].ix[0:1] 
Out[1]: 
      A B C 
2012-01-10 7 8 9 

是否有這樣做的更好辦法?我不喜歡我必須指定.ix [0:1]而不是.ix [0],但是如果我不輸出更改爲TimeSeries而不是DataFrame中的單個行。我發現使用原始DataFrame之上的旋轉的TimeSeries重新加工很困難。

沒有.ix[0:1]

frame.ix[date_after:].ix[0] 
Out[1]: 
A 7 
B 8 
C 9 
Name: 2012-01-10 00:00:00 

感謝,

約翰

回答

27

你可能想直接做索引:

i = frame.index.searchsorted(date) 
frame.ix[frame.index[i]] 

觸摸冗長,但你可以把它在一個函數中。關於你會得到的(O(log n)

+5

對此的任何文檔? – Pablojim 2013-10-14 09:49:26

+0

@Pablojim:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.searchsorted.html?highlight=searchsorted#pandas.Index.searchsorted – naught101 2018-02-16 03:33:04

3

即使在2012年,韋斯本人提出並回答了問題,也無法拒絕回答這個問題。是的,只需使用截斷。

df.truncate(before='2012-01-07') 
12

無法抗拒回答這個問題,即使有人問,回答說,在2012年,由韋斯自己,又在2015年,由AJSP。是的,除了「truncate」之外,您還可以使用get_loc和「nearst」選項

df.iloc[df.index.get_loc(datetime.datetime(2016,02,02),method='nearest')] 
+1

這是我想要的答案。但它看起來像「最近」可能會返回一個*上一個*行。 「回填」似乎在返回後最接近。 – Ian 2017-06-21 01:06:14

相關問題