我必须使用数据框A和B.两者都有一个'datetime'列和另一个公共列X.B更大,因为它每分钟都有X而A在一天中间歇性时间只有X.对于A中的每个'datetime',我想使用B计算前30分钟内X的范围(或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
这里的temp用于在B的A时间戳之前的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)
这适用于我,但使用循环:
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)