Python 当数据点为浮点数据类型时,如何将列与最近的数据点合并?

Python 当数据点为浮点数据类型时,如何将列与最近的数据点合并?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,看起来像: Timestamp Notif_No Notif_Data 8517.45 1 App_ON 8518.15 2 App_DELAY 8519.26 3 App_WORK 8520.39 4 App_OFF 另一个CSV文件为: Timestamp

我有一个数据框,看起来像:

Timestamp           Notif_No     Notif_Data
8517.45             1            App_ON
8518.15             2            App_DELAY
8519.26             3            App_WORK
8520.39             4            App_OFF
另一个CSV文件为:

Timestamp           Data
8516.11             abc
8516.21             bcd
8517.45             abc
8518.04             bcd
8518.14             zxc
8519.16             bcd
8519.26             zxc
8520.29             qwe
8520.39             abc
当我根据“时间戳”合并两个文件时:

这样,它会从第一个CSV文件中丢失一个“Notif_No”值。因为在上一个数据帧中,“2”的最近值为“8518.14”。我想根据这个合并。 我想要的结果是:

Timestamp           Data        Notif_No     Notif_Data
8516.11             abc
8516.21             bcd
8517.45             abc         1            App_ON
8518.04             bcd
8518.14             zxc         2            App_DELAY
8519.16             bcd
8519.26             zxc         3            App_WORK
8520.29             qwe
8520.39             abc         4            App_OFF
堆栈溢出的可用解释说明了当使用datetime时间戳格式时如何工作,但这里我使用浮点秒格式的数据点。此外,这里的示例非常一致,但我从记录器收集的真实数据非常嘈杂,有些数据值不一致,因此最近的数据点可能在0.01秒到10秒之间。

IIUC,您可以执行以下操作:

这类似于左连接,只是我们匹配最近的关键点而不是相等的关键点



我建议创建一个要加入的密钥。我在下面创建的键相当粗糙。我只是删除最后一个数字。四舍五入到1位数也不会得到你想要的匹配

df1['key']=df1['Timestamp'].astype(str).apply(lambda x:x[0:-1])
df2['key']=df2['Timestamp'].astype(str).apply(lambda x:x[0:-1])
pd.合并(df2,df1[['key','Notif_No','Notif_Data']],on='key',how='left')。删除(['key',axis=1)
其结果是:

    Data    Timestamp   Notif_No    Notif_Data
0   abc 8516.11 NaN NaN
1   bcd 8516.21 NaN NaN
2   abc 8517.45 1.0 App_ON
3   bcd 8518.04 NaN NaN
4   zxc 8518.14 2.0 App_DELAY
5   bcd 8519.16 NaN NaN
6   zxc 8519.26 3.0 App_WORK
7   qwe 8520.29 NaN NaN
8   abc 8520.39 4.0 App_OFF
您可以将
lambda x:x[0:-1]
替换为
lambda x:keyfunc(x)
,并定义某种函数来根据自己的喜好操纵时间戳

pd.merge_asof(df2,df1,on='Timestamp',direction='nearest',tolerance=0.09)
   Timestamp Data  Notif_No Notif_Data
0    8516.11  abc       NaN        NaN
1    8516.21  bcd       NaN        NaN
2    8517.45  abc       1.0     App_ON
3    8518.04  bcd       NaN        NaN
4    8518.14  zxc       2.0  App_DELAY
5    8519.16  bcd       NaN        NaN
6    8519.26  zxc       3.0   App_WORK
7    8520.29  qwe       NaN        NaN
8    8520.39  abc       4.0    App_OFF
    Data    Timestamp   Notif_No    Notif_Data
0   abc 8516.11 NaN NaN
1   bcd 8516.21 NaN NaN
2   abc 8517.45 1.0 App_ON
3   bcd 8518.04 NaN NaN
4   zxc 8518.14 2.0 App_DELAY
5   bcd 8519.16 NaN NaN
6   zxc 8519.26 3.0 App_WORK
7   qwe 8520.29 NaN NaN
8   abc 8520.39 4.0 App_OFF