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

2024-04-19 13:49:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是一个眼动跟踪器,它以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 

如您所见,没有奇数时间索引,因为机器每2ms采样一次

我的第二个数据帧跟踪发送到eyetracker的TTL。这些ttl可以在任何时间以毫秒分辨率出现,因此这里可以有奇数时间戳。第二个数据帧有两列,tmsg。这里有一个片段:

     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中针对的一些索引还不存在,这就是我当前的方法失败的原因。你知道吗

以下是我尝试的:

samples.loc[events['t'], 'event'] = events['msg']  # throws KeyError

正确的方法是什么?为清楚起见,我想将NaN放在dataframe2中不存在的列中(即上面示例中的events)。你知道吗


Tags: 数据方法eventdataframe记录时间msgevents
1条回答
网友
1楼 · 发布于 2024-04-19 13:49:37

初始尝试失败的原因是目标数据帧中不存在这些值,您要做的是在有匹配的情况下分配事件,并将事件设置为NaN或blank,或者在没有实际事件的情况下设置任何事件。你知道吗

您要做的是将另一个df与第一个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 first来保留左侧的dataframes数据:

df.combine_first(df1)

相关问题 更多 >