python - 如何在给定日期时间值限制下填充数据框中的列?

标签 python pandas dataframe python-datetime fuzzy-comparison

给定 pandas 数据帧 df1df2:

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]})

最佳答案

使用pd.merge_asof()

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

注意:连接字段(在您的情况下是d)必须针对两个 DF 进行排序

关于python - 如何在给定日期时间值限制下填充数据框中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48828173/

相关文章:

python Pandas : Find a value in another dataframe and replace it

python - 两个数据帧上列函数的高效 pandas 操作

python - Pandas:当组中的值满足所需条件时从数据中删除组

python - Pandas - 提取行直到满足条件

python - 重新采样 pandas 数据帧并返回开始时间和结束时间

python - 将 Raspberry Pi 数据发送到远程服务器

python - 将特定于组的功能添加到 pandas 数据框

python - 从 Pandas 输出中删除行数

python - 向具有非数字 x 轴的多个子图添加一条水平线

python-3.x - 以字符串形式返回 Pandas DataFrame 索引