【发布时间】:2021-02-19 20:45:41
【问题描述】:
a、b 是 pandas 数据帧,a 的更新频率低于b。
例如
a = pd.DataFrame({'id': np.array([1, 3, 4, 9]*2),
'date': np.repeat(['2021-01-03', '2021-02-06'], 4),
'score': np.linspace(0, 1, 8)})
a['date'] = pd.to_datetime(a['date'])
b = pd.DataFrame({'id': np.array([1, 3, 4, 9]*5),
'date': np.repeat(['2021-01-03', '2021-01-15', '2021-01-23', '2021-02-08', '2021-02-17'], 4),
'value': np.linspace(0, 1, 20)})
b['date'] = pd.to_datetime(b['date'])
我想通过将b 中的 id 和日期与a 中的最新日期进行匹配来合并这两个帧,因此在此示例中,我需要以下日期配对以进行合并:
b -> a
2021-01-03 -> 2021-01-03
2021-01-15 -> 2021-01-03
2021-01-23 -> 2021-01-03
2021-02-08 -> 2021-02-06
2021-02-17 -> 2021-02-06
我可以在a 中的每个日期上进行for 循环,选择b 中位于a 中每对相邻日期之间的数据,然后从@987654333 添加score @ 作为一个新列,然后将这些帧连接在一起,但是有更快的方法吗?
【问题讨论】:
-
你检查过
merge_asof()吗? -
@CeliusStingher 我没有听说过这个功能,但我肯定会从现在开始使用它