2016-09-29 74 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)