我有一个包含两列的温度数据框架(Temp):
我还有另一个数据帧(Activated),其中有一列描述了某些设备激活的时间:
这两个数据帧都是在同一时期内的,每个"TimeStamp“都存在于这两个数据帧中。
我想知道,在Activated数据帧中的每一次,它经过多长时间,直到温度上升。
我知道如何做到"C样式“,有两个for循环(在Activated上一个迭代找到Temp中的时间,然后循环直到找到更高的温度)。
但我相信,有一种更清洁、更有效的方法来使用熊猫。示例数据:
Temp
1 25.6
2 25.4
3 24
4 25.8
5 23.2
6 24.3
7 28.1Activated
2
4对于Activated中的第一行,时间是2 --时间中的温度2是25.4,结果应该是2,因为只有时间4才会上升。对于Activated中的第二行,时间是4 --时间中的温度4是25.8,结果应该是3,因为只有时间7才会上升。
2的输出为2,4为3
发布于 2018-11-23 14:24:59
这是一个部分矢量化的解决方案。注意,pd.Series.apply只是一个Python级别的循环。
temp = pd.DataFrame({'Time': list(range(1, 8)),
'Temperature': [25.6, 25.4, 24, 25.8, 23.2, 24.3, 28.1]})
activated = pd.DataFrame({'Time': [2, 4]})
def time_until_higher(x):
current_temp = temp_s.at[x]
diffs = temp_s[temp_s.index > x] - current_temp
return (diffs < 0).values.argmin() + 1
temp_s = temp.set_index('Time')['Temperature'] # assume times are sorted
activated['Next'] = activated['Time'].apply(time_until_higher)
print(activated)
Time Next
0 2 2
1 4 3https://stackoverflow.com/questions/53448075
复制相似问题