2016-09-29 70 views
-1

我必須爲數據幀A和B.兩者都有'datetime'列和另一個常見列X. B更大,因爲它在每分鐘有X,而A在間歇期間只有X一天。對於A中的每個「日期時間」,我想用B.因此,像計算X的前30分鐘內的範圍內(STDEV或):熊貓數據幀與範圍/ stdev的比較

For i,time in enumerate(A['time']): temp=B[(B['time'] > time -timedelta(days=0, minutes=30)) and (B['time'] <=time] range[i]=temp.max-temp.min

這裏溫度意在快照中的所有數據A在B的時間戳之前30分鐘。有沒有簡單的方法,也許不需要循環的方法?請注意,A和B的大小是不同的。

樣品A:(只有很少的具有輸入沿可用輸出) Date input output 2015-01-02 20:48:00-00:00 1120 343 2015-01-02 21:25:00-00:00 1345 365

樣品B:(所有的輸入可用的,但沒有輸出) Date input 2014-11-02 00:32:00-00:00 1542 2014-11-02 00:33:00-00:00 1285

樣本輸出: Date input output Range_input_previous 30 min 2015-01-02 20:48:00-00:00 1120 343 ??(use table B) 2015-01-02 21:25:00-00:00 1345 365 ??(use table B)

+0

你能提供兩個數據幀的樣本嗎? –

+0

已添加。讓我知道它是否有幫助 – dayum

+0

您可以添加所需的輸出嗎? – jezrael

回答

0

這爲我工作,但使用循環:

rangex=np.zeros(A.shape[0])
for i,Date in enumerate(A['Date']): temp=B[(B['Date'] > Date-datetime.timedelta(days=0, minutes=30)) & (B['Date'] <=Date)] rangex[i]=temp['input'].max()-temp['input'].min()
A['range']=pd.Series(rangex, index=A.index)