如何将一个数据框合并到另一个数据框中,插入不存在的行?

时间:2014-02-05 21:17:05

标签: python pandas

我正在使用一个以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有两列tmsg。这是一个片段:

     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)。

1 个答案:

答案 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)
相关问题