2016-01-21 133 views
0

我試圖隔離特定的heading值,其中time與datetime64/timedelta值最接近。從最接近日期時間的Pandas DF列獲取價值時間64

DF看起來像這樣。

heading  times 
0 270.00  2016-01-20 21:39:31 
1  0.00  2016-01-20 21:39:30 
2 270.00  2016-01-20 21:34:15 
3 293.36  2016-01-20 21:29:00 
4 90.00  2016-01-20 21:28:59 

我創建了一個timedelta,這是times - 10 mins。我想要做的是獲得最接近10分鐘前的行的heading值,並將其與當前標題值進行比較。任何想法將不勝感激。

編輯以解決下面的註釋。

最終結果是將heading值與任意時間點的最接近的航向值(例如過去的10分鐘)進行比較。

因此,例如將row 1中的heading值與row 3中的heading值進行比較,因爲它與過去最接近10分鐘。

+0

這是否幫助? http://stackoverflow.com/a/32237949/3639023 – johnchase

+0

謝謝,我一直在用'np.argwhere'使用這個語法'np.argwhere(start'(start = delta object)'<'2016-01- 20 23:24:31'),但是它會返回一個值列表,比如'[[0] [1] [2]'關於什麼可能出錯或者我如何使用這個輸出的想法? – hselbie

+0

'np.where'將返回delta對象小於您比較的時間的所有值,因此您將獲得一個列表。如果你只想在最近的時間*之前*你比較對你的時間可以做這樣的事情:'df.iloc [np.amax(np.where(df.index <'1/2/2015 12:00') )]'有可能包含一個你想從代碼中獲得什麼的例子嗎?例如,如果一個時間--10米通過,沒有對應數據幀的值? – johnchase

回答

0

希望我能夠完全按照陳述來解決這個問題。例如,問題表明,目標是獲得最接近的值(即使沒有接近該值的值),即前10分鐘獲得的值爲。我會假設最接近的方式,而不是在一分鐘之內進行一些其他任意的截斷。

首先我會從times列設置一個DatetimeIndex

df.index = pd.DatetimeIndex(df.times) 

然後創建的時間差:

time_delta = df.index - pd.Timedelta(minutes=10) 

定義一個函數來獲取從索引中最接近的時間。這是直接從以前SO answer

def nearestDate(dates, pivot): 
    return min(dates, key=lambda x: abs(x - pivot)) 

採取創建一個新的列,其中值是從最接近時間值,以十分鐘之前

df['heading2'] = [df.loc[nearestDate(df.index, e)]['heading'] for e in time_delta] 

df 

         heading times     heading2 
2016-01-20 21:39:31 270.0  2016-01-20 21:39:31 293.6 
2016-01-20 21:39:30 0.0  2016-01-20 21:39:30 293.6 
2016-01-20 21:34:15 270.0  2016-01-20 21:34:15 90.0 
2016-01-20 21:29:00 293.6  2016-01-20 21:29:00 90.0 
2016-01-20 21:28:59 90.0  2016-01-20 21:28:59 90.0 
相關問題