我正在尝试使用下面给出的代码在python中合并2个数据帧。以下是有关数据框的信息
以下是 pittldf 数据的样子:
pittlSTC pittlState
1.39e+10 0
1.4e+10 1
1.4e+10 0
1.4e+10 1
1.4e+10 0
1.4e+10 1
1.4e+10 1
1.4e+10 1
1.4e+10 1
1.4e+10 0
1.4e+10 1
1.4e+10 0
1.4e+10 1
以下是 nlxdf 的样子
NlxTTL NlxTime
0 13788602129.0
1 13789602296.0
0 13790602496.0
1 13791602629.0
0 13792602829.0
1 13793602996.0
0 13794603162.0
1 13795603329.0
0 13796603496.0
1 13797603662.0
0 13798603829.0
1 13799603996.0
0 13800604162.0
1 13801604329.0
以下是我使用的脚本:
import scipy.io as sio
import pandas as pd
data = sio.loadmat('testRun2.mat')
nlxTTL = list(data['NlxTTL'][0])
nlxTime = list(data['NlxTime'][0])
pittlState = list(data['pittlState'][0])
pittlSTC = list(data['pittlSTC'][0])
piVideoSTC = list(data['piVideoSTC'][0])
nlxdf = pd.DataFrame({'NlxTTL':nlxTTL, 'NlxTime':nlxTime})
pittldf = pd.DataFrame({'pittlState': pittlState, 'pittlSTC':pittlSTC, 'piVideoSTC':piVideoSTC})
merged_df = pittldf.merge(nlxdf, left_on='pittlState', right_on='NlxTTL', how='outer')
运行脚本后,我期待以下结果:
NlxTTL NlxTime pittlSTC pittlState
0 13788602129.0 1.39e+10 0
1 13789602296.0 1.4e+10 1
0 13790602496.0 1.4e+10 0
1 13791602629.0 1.4e+10 1
0 13792602829.0 1.4e+10 0
1 13793602996.0 1.4e+10 1
0 13794603162.0 NA NA
1 13795603329.0 1.4e+10 1
0 13796603496.0 NA NA
1 13797603662.0 1.4e+10 1
0 13798603829.0 NA NA
1 13799603996.0 1.4e+10 1
0 13800604162.0 1.4e+10 0
1 13801604329.0 1.4e+10 1
NA NA 1.4e+10 0
NA NA 1.4e+10 1
但我无法获得此输出。我该怎么办?谢谢!
编辑我正在尝试在非唯一的键(二进制值)上合并2个数据帧。
我将解释如何获得这些数据。将TTL脉冲发送到2个不同的机器后收集此数据为LOW(0)HIGH(1)LOW(0)HIGH(1),依此类推。和录音时间分别。因此,对于每台机器,您应该接收HIGH(即1)或LOW(即0)。但是在其中一台机器上,我最终错过了一些输入,如 pittldf 所示,连续的1或HIGH,它应该重复LOW(0)和HIGH(1)。
我想知道是否有一种方法可以组合这些数据帧以使用State(1或0)正确对齐时间。