我正在使用一个以500赫兹进行采样的眼睛跟踪器,因此我每2ms进行一次测量。我已将这些数据加载到数据框中并使用时间样本重新编制索引,以便我的行索引与录制时间的毫秒时间匹配:
以下是此数据框的一部分(请注意,event
列现在包含空字符串):
x y cr event
2000 109.9 1133.7 4264.0
2001 109.0 1133.3 4267.0
2002 107.1 1130.6 4269.0
2003 104.3 1128.0 4270.0
2004 97.8 1125.2 4268.0
2005 89.8 1124.3 4266.0
2006 79.2 1121.3 4274.0
2007 69.5 1118.7 4284.0
2008 59.6 1116.7 4293.0
2009 53.0 1116.9 4291.0
2010 48.6 1117.1 4290.0
正如您所看到的,再次没有奇数时间索引,因为机器每2 ms采样一次。
我的第二个DataFrame跟踪发送给eyetracker的TTL。这些TTL可以在毫秒级分辨率下随时发生,因此可以是奇数时间戳,这里。第二个DataFrame有两列t
和msg
。这是一个片段:
t msg
0 11911 WarningOnset
1 12510 CueOnset
2 14693 WarningOnset
3 17009 WarningOnset
4 17642 CueOnset
我的目标是将第二个数据框合并到第一个数据框中,以便将dataframe2的msg
列中的每个项目放入由{{1}列指示的索引处的dataframe1的event
列中}}
这意味着我在dataframe1中定位的某些索引尚不存在,这就是为什么我当前的方法失败了t
。
这是我试过的:
KeyError
这样做的正确方法是什么?为清楚起见,我想将samples.loc[events['t'], 'event'] = events['msg'] # throws KeyError
放在dataframe2中不存在的列中(即上例中的NaN
)。
答案 0 :(得分:1)
您的初始尝试失败的原因是您的目标数据框中不存在这些值,您要做的是分配匹配的事件并将事件设置为NaN或空白或任何没有真实的地方事件
你想要做的是将另一个df合并到你的第一个索引(应该代表相同的东西)或代表同一个东西的列。
您还需要在第二个df中重命名列。
重命名专栏:
df1.rename({'msg':'event'})
现在将列't'设置为索引
df1.set_index(['t'],inplace=True)
现在合并:
df.merge(df1, left_index=True, right_index=True, how='left')
您还可以使用先保留左侧数据帧数据的组合:
df.combine_first(df1)