我有两个熊猫数据框。一个包含我通常的测量值(时间索引)。来自不同来源的第二帧包含系统状态。它也是时间索引的,但是状态数据框中的时间与我的数据框的时间与测量值不匹配。我想要实现的是,现在测量数据框中的每一行还包含测量时间之前状态数据框中出现的最后一个状态。
例如,我有一个这样的状态框架:
state
time
2013-02-14 12:29:37.101000 SystemReset
2013-02-14 12:29:39.103000 WaitFace
2013-02-14 12:29:39.103000 NormalExecution
2013-02-14 12:29:39.166000 GreetVisitors
2013-02-14 12:29:46.879000 AskForParticipation
2013-02-14 12:29:56.807000 IntroduceVernissage
2013-02-14 12:30:07.275000 PictureQuestion
我的测量是这样的:
utime
time
2013-02-14 12:29:38.697038 0
2013-02-14 12:29:38.710432 1
2013-02-14 12:29:39.106475 2
2013-02-14 12:29:39.200701 3
2013-02-14 12:29:40.197014 0
2013-02-14 12:29:42.217976 5
2013-02-14 12:29:57.460601 7
我想最终得到一个这样的数据框:
utime state
time
2013-02-14 12:29:38.697038 0 SystemReset
2013-02-14 12:29:38.710432 1 SystemReset
2013-02-14 12:29:39.106475 2 NormalExecution
2013-02-14 12:29:39.200701 3 GreetVisitors
2013-02-14 12:29:40.197014 0 GreetVisitors
2013-02-14 12:29:42.217976 5 GreetVisitors
2013-02-14 12:29:57.460601 7 Introducevernissage
我发现了一个非常低效的解决方案,如下所示:
result = measurements.copy()
stateList = []
for timestamp, _ in measurements.iterrows():
candidateStates = states.truncate(after=timestamp).tail(1)
if len(candidateStates) > 0:
stateList.append(candidateStates['state'].values[0])
else:
stateList.append("unknown")
result['state'] = stateList
你有什么方法可以优化这个吗?