python - 在最近的日期时间/时间戳上合并数据帧

标签 python pandas

我有两个数据框如下:

A = pd.DataFrame({"ID":["A", "A", "C" ,"B", "B"], "date":["06/22/2014","07/02/2014","01/01/2015","01/01/1991","08/02/1999"]})

B = pd.DataFrame({"ID":["A", "A", "C" ,"B", "B"], "date":["02/15/2015","06/30/2014","07/02/1999","10/05/1990","06/24/2014"], "value": ["3","5","1","7","8"] })

看起来像下面这样:

>>> A
  ID       date
0  A 2014-06-22
1  A 2014-07-02
2  C 2015-01-01
3  B 1991-01-01
4  B 1999-08-02

>>> B
  ID       date value
0  A 2015-02-15     3
1  A 2014-06-30     5
2  C 1999-07-02     1
3  B 1990-10-05     7
4  B 2014-06-24     8

我想使用最近的日期将 A 与 B 的值合并。在此示例中,所有日期都不匹配,但有些日期可能匹配。

输出应该是这样的:

>>> C
  ID        date value
0  A  06/22/2014     8
1  A  07/02/2014     5
2  C  01/01/2015     3
3  B  01/01/1991     7
4  B  08/02/1999     1

在我看来,pandas 中应该有一个允许这样做的本地函数。

注意:这里也有人问过类似的问题 pandas.merge: match the nearest time stamp >= the series of timestamps

最佳答案

您可以使用 reindex使用 method='nearest' 然后是 merge :

A['date'] = pd.to_datetime(A.date)
B['date'] = pd.to_datetime(B.date)
A.sort_values('date', inplace=True)
B.sort_values('date', inplace=True)

B1 = B.set_index('date').reindex(A.set_index('date').index, method='nearest').reset_index()
print (B1)

print (pd.merge(A,B1, on='date'))
  ID_x       date ID_y value
0    B 1991-01-01    B     7
1    B 1999-08-02    C     1
2    A 2014-06-22    B     8
3    A 2014-07-02    A     5
4    C 2015-01-01    A     3

也可以添加参数后缀:

print (pd.merge(A,B1, on='date', suffixes=('_', '')))
  ID_       date ID value
0   B 1991-01-01  B     7
1   B 1999-08-02  C     1
2   A 2014-06-22  B     8
3   A 2014-07-02  A     5
4   C 2015-01-01  A     3

关于python - 在最近的日期时间/时间戳上合并数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38833362/

相关文章:

python - 解决错误 104 和 Twitter 速率限制

python - 将蒙版图像保存为 FITS

python - 如何使用 lambda 函数在 python for 循环中捕获 KeyError?

python - 为什么打印 py_varo 而不是文本框中的值?

python - Pandas 数据框属性错误 : 'DataFrame' object has no attribute 'design_info'

python - 如何在 numpy 中为 CNN 实现反卷积层?

python - 如何有效地扩展/展平 Pandas 数据框

python-3.x - 如何使用多个函数创建多个数据框

python - Dataframe.rolling().mean不计算移动平均值

python - 计算每个值在 pandas 列中所占百分比的函数