我有两个数据文件,它们都是按日期时间索引的。例如,dataframe 1如下所示:
|date | value |
+----------------+--------+
|2021-11-11 09:00| 1 |
|2021-11-11 10:00| 1 |
|2021-11-12 11:00| 2 |
|2021-11-14 09:00| 2 |
|2021-11-15 09:30| 3 |而dataframe 2看起来像:
|date | value |
+----------------+--------+
|2021-11-10 11:00| 2 |
|2021-11-11 09:30| 3 |
|2021-11-12 12:00| 4 |
|2021-11-13 09:50| 2 |
|2021-11-15 10:30| 3 |对于dataframe 1中的每个条目,我希望在dataframe 2中找到最近的一个条目,并在dataframe 1中创建一个新列,以设置两个dataframe之间的关系。
为了使它更加清楚,预期的结果应如下所示。
|date | value | df2_index |
+----------------+--------+----------------|
|2021-11-11 09:00| 1 |2021-11-10 11:00|
|2021-11-11 10:00| 1 |2021-11-11 09:30|
|2021-11-12 11:00| 2 |2021-11-11 09:30|
|2021-11-14 09:00| 2 |2021-11-13 09:50|
|2021-11-15 09:30| 3 |2021-11-13 09:50|对于dataframe 1中的第一个条目,2021-11-11 09:00最近的一个条目是2021-11-10 11:00,第三个条目2021-11-12 11:00的最新条目,这意味着在dataframe 2中最大的不超过2021-11-12 11:00的时间戳是2021-11-11 09:30。
有任何熊猫方法可以有效地实现这一功能吗?
非常感谢。
发布于 2022-09-19 06:17:08
熊猫merge_asof应该足够了:
pd.merge_asof(df1, df2.assign(df2_index = df2.date), on = 'date')
date value_x value_y df2_index
0 2021-11-11 09:00:00 1 2 2021-11-10 11:00:00
1 2021-11-11 10:00:00 1 3 2021-11-11 09:30:00
2 2021-11-12 11:00:00 2 3 2021-11-11 09:30:00
3 2021-11-14 09:00:00 2 2 2021-11-13 09:50:00
4 2021-11-15 09:30:00 3 2 2021-11-13 09:50:00https://stackoverflow.com/questions/73767537
复制相似问题