我正在使用以 500 赫兹采样的眼动仪,因此我每 2 毫秒进行一次测量。我已将此数据加载到数据框中并使用时间样本对其重新编制索引,以便我的行索引与进行记录的时间(以毫秒为单位)相匹配:
这是此数据帧的一部分(请注意,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 毫秒采样一次。
我的第二个 DataFrame 跟踪发送到眼动仪的 TTL。这些 TTL 可以在任何时间发生,分辨率为毫秒,因此这里可以是奇数时间戳。第二个 DataFrame 有两列,t 和 msg。这是一个片段:
t msg
0 11911 WarningOnset
1 12510 CueOnset
2 14693 WarningOnset
3 17009 WarningOnset
4 17642 CueOnset
我的目标是将第二个 DataFrame 合并到第一个 DataFrame 中,这样 DataFrame2 的 msg 列中的每个项目都被放入 DataFrame1 的 event 列中的索引处由 t 列指示。
这意味着我在 dataframe1 中定位的一些索引尚不存在,这就是为什么我当前的方法因 KeyError 而失败。
这是我尝试过的:
samples.loc[events['t'], 'event'] = events['msg'] # throws KeyError
正确的做法是什么?为清楚起见,我想将 NaN 放在 dataframe2 中不存在的列中(即上例中的 events)。
请您参考如下方法:
您最初尝试失败的原因是您的目标数据框中不存在这些值,您要做的是分配有匹配项的事件并将事件设置为 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')
您还可以先使用 combine 来保留左侧数据帧数据:
df.combine_first(df1)
