python - 获取其他数据框熊猫中日期最近的行
问题描述
我有2个数据框Dataframe1:
id date1
1 11-04-2022
1 03-02-2011
2 03-05-2222
3 01-01-2001
4 02-02-2012
和数据框2:
id date2 data data2
1 11-02-2222 1 3
1 11-02-1999 3 4
1 11-03-2022 4 5
2 22-03-4444 5 6
2 22-02-2020 7 8
...
我想要做的是从 dataframe2 中获取与 Dataframe1 中 date1 最接近的行,但它必须适合 id,但日期必须在 date1 之前 所需的输出如下所示:
id date1 date2 data data2
1 11-04-2022 11-03-2022 4 5
1 03-02-2011 11-02-1999 3 4
2 03-05-2222 22-02-2020 7 8
我将如何使用熊猫来做到这一点?
解决方案
尝试pd.merge_asof
,但首先将 date1、date2 转换为 datetime 并对两个时间范围进行排序:
df1["date1"] = pd.to_datetime(df1["date1"])
df2["date2"] = pd.to_datetime(df2["date2"])
df1 = df1.sort_values(by="date1")
df2 = df2.sort_values(by="date2")
print(
pd.merge_asof(
df1,
df2,
by="id",
left_on="date1",
right_on="date2",
direction="nearest",
).dropna(subset=["date2"])
)
推荐阅读
- python - 如何提取键及其值并添加值以在 python 字典中打印总数?
- c# - 如何在 EFCore 中使用 EF .SqlQuery 表达式?
- swiftui-list - 在 SwiftUI 中使用列表时如何解决错误“Initializer 'init(_:id:rowContent:)' 要求 '(String, String)' 符合 'Hashable'”
- java - 有没有一种方法可以循环检查 Frame.state 的状态,而无需循环检查中的代码?
- c# - 无法从控件中读取“浮点”类型的值
- javascript - 如何使它在AngularJs中的单个标头上工作
- docker - 错误:无法在 CouchDB Docker 容器中解析 http://any:5984/verifytestdb/
- javascript - 无法在 DOM 中选择元素
- c++ - 将值更改为 C++ 的数组并保存文件
- c - 传递给 pthread 函数调用后访问结构成员