簡體   English   中英

在 pandas 中按日期時間索引的 dataframe 的每個條目的另一個 dataframe 中查找最新條目的有效方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM