[英]efficient way to find the most recent entry in another dataframe for each entry of a dataframe indexed by datetime in pandas
我有兩個數據框,它們都按日期時間索引。 例如,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 中創建一個新列。
為了更清楚地說明,預期結果應如下所示。
|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
。
是否有任何 pandas 方法可以有效地實現這個 function ?
太謝謝了。
pandas 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:00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.