如何在给定的日期时间值限制下填充数据框中的列?
How to populate a column in dataframe under given datetime value restiriction?
给定 pandas 数据帧 df1
和 df2
:
df1
:
d v
0 2018-02-16 13:39:55.562506 1
1 2018-02-16 10:18:56.768246 4
和df2
:
d vx
0 2018-02-16 13:39:56.668377 100
1 2018-02-16 14:01:05.766319 200
如何使用 df2
中的 vx
值扩展 df1
,以便时间戳 几乎 相同,即值相差不超过 2 秒(以及不匹配的 NaN)?
示例:
d v vx
0 2018-02-16 10:18:56.768246 4 NaN
1 2018-02-16 13:39:55.562506 1 100.0
代码如下:
import pandas as pd
import datetime as dt
dt1 = dt.datetime(2018, 2, 16, 13, 39, 55, 562506)
dt2 = dt.datetime(2018, 2, 16, 10, 18 , 56, 768246)
df1 = pd.DataFrame({'v':[1,4], 'd':[dt1, dt2]})
dt3 = dt.datetime(2018, 2, 16, 13, 39 , 56, 668377)
dt4 = dt.datetime(2018, 2, 16, 14, 1 , 5, 766319)
df2 = pd.DataFrame({'vx':[100,200], 'd':[dt3, dt4]})
In [232]: pd.merge_asof(df1.sort_values('d'), df2, on='d',
tolerance=pd.to_timedelta('2S'),
direction='nearest')
Out[232]:
d v vx
0 2018-02-16 10:18:56.768246 4 NaN
1 2018-02-16 13:39:55.562506 1 100.0
注意:必须为两个 DF 对连接字段(d
在您的情况下)进行排序
给定 pandas 数据帧 df1
和 df2
:
df1
:
d v
0 2018-02-16 13:39:55.562506 1
1 2018-02-16 10:18:56.768246 4
和df2
:
d vx
0 2018-02-16 13:39:56.668377 100
1 2018-02-16 14:01:05.766319 200
如何使用 df2
中的 vx
值扩展 df1
,以便时间戳 几乎 相同,即值相差不超过 2 秒(以及不匹配的 NaN)?
示例:
d v vx
0 2018-02-16 10:18:56.768246 4 NaN
1 2018-02-16 13:39:55.562506 1 100.0
代码如下:
import pandas as pd
import datetime as dt
dt1 = dt.datetime(2018, 2, 16, 13, 39, 55, 562506)
dt2 = dt.datetime(2018, 2, 16, 10, 18 , 56, 768246)
df1 = pd.DataFrame({'v':[1,4], 'd':[dt1, dt2]})
dt3 = dt.datetime(2018, 2, 16, 13, 39 , 56, 668377)
dt4 = dt.datetime(2018, 2, 16, 14, 1 , 5, 766319)
df2 = pd.DataFrame({'vx':[100,200], 'd':[dt3, dt4]})
In [232]: pd.merge_asof(df1.sort_values('d'), df2, on='d',
tolerance=pd.to_timedelta('2S'),
direction='nearest')
Out[232]:
d v vx
0 2018-02-16 10:18:56.768246 4 NaN
1 2018-02-16 13:39:55.562506 1 100.0
注意:必须为两个 DF 对连接字段(d
在您的情况下)进行排序