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