gpt4 book ai didi

python - 是否有与 Python 的 pandas.merge_asof 等效的 R 语言?

转载 作者:行者123 更新时间:2023-12-01 00:26:37 24 4
gpt4 key购买 nike

pandas.merge_asof 合并两个数据帧,执行左连接,除非它匹配最近的键而不是相等的键。

示例(从 documentation 窃取):

>>> quotes
time ticker bid ask
0 2016-05-25 13:30:00.023 GOOG 720.50 720.93
1 2016-05-25 13:30:00.023 MSFT 51.95 51.96
2 2016-05-25 13:30:00.030 MSFT 51.97 51.98
3 2016-05-25 13:30:00.041 MSFT 51.99 52.00
4 2016-05-25 13:30:00.048 GOOG 720.50 720.93
5 2016-05-25 13:30:00.049 AAPL 97.99 98.01
6 2016-05-25 13:30:00.072 GOOG 720.50 720.88
7 2016-05-25 13:30:00.075 MSFT 52.01 52.03

>>> trades
time ticker price quantity
0 2016-05-25 13:30:00.023 MSFT 51.95 75
1 2016-05-25 13:30:00.038 MSFT 51.95 155
2 2016-05-25 13:30:00.048 GOOG 720.77 100
3 2016-05-25 13:30:00.048 GOOG 720.92 100
4 2016-05-25 13:30:00.048 AAPL 98.00 100

>>> pd.merge_asof(trades, quotes,
... on='time',
... by='ticker')
time ticker price quantity bid ask
0 2016-05-25 13:30:00.023 MSFT 51.95 75 51.95 51.96
1 2016-05-25 13:30:00.038 MSFT 51.95 155 51.97 51.98
2 2016-05-25 13:30:00.048 GOOG 720.77 100 720.50 720.93
3 2016-05-25 13:30:00.048 GOOG 720.92 100 720.50 720.93
4 2016-05-25 13:30:00.048 AAPL 98.00 100 NaN NaN

在上面的示例中,pd.merge_asof 将每行交易与具有相同代码和最接近时间的报价行进行匹配。

我发现这个操作在我的工作流程中非常不可或缺,我一直在绞尽脑汁地思考如何在 R 中完成这个操作。当然我可以只在 python 中执行操作并在 R 中读回数据帧,但是我的部分动机是学习 R。

最佳答案

您可以使用data.table包进行滚动连接:

trades[quotes, on=.(ticker, time), roll=-Inf, c("bid","ask") := .(bid, ask)]  

输出:

                  time ticker  price quantity    bid    ask
1: 2016-05-25 13:30:00 MSFT 51.95 75 51.95 51.96
2: 2016-05-25 13:30:00 MSFT 51.95 155 51.97 51.98
3: 2016-05-25 13:30:00 GOOG 720.77 100 720.50 720.93
4: 2016-05-25 13:30:00 GOOG 720.92 100 720.50 720.93
5: 2016-05-25 13:30:00 AAPL 98.00 100 NA NA

数据:

library(data.table)

quotes <- fread("time ticker bid ask
2016-05-25_13:30:00.023 GOOG 720.50 720.93
2016-05-25_13:30:00.023 MSFT 51.95 51.96
2016-05-25_13:30:00.030 MSFT 51.97 51.98
2016-05-25_13:30:00.041 MSFT 51.99 52.00
2016-05-25_13:30:00.048 GOOG 720.50 720.93
2016-05-25_13:30:00.049 AAPL 97.99 98.01
2016-05-25_13:30:00.072 GOOG 720.50 720.88
2016-05-25_13:30:00.075 MSFT 52.01 52.03")

trades <- fread("time ticker price quantity
2016-05-25_13:30:00.023 MSFT 51.95 75
2016-05-25_13:30:00.038 MSFT 51.95 155
2016-05-25_13:30:00.048 GOOG 720.77 100
2016-05-25_13:30:00.048 GOOG 720.92 100
2016-05-25_13:30:00.048 AAPL 98.00 100")

quotes[, time := as.POSIXct(time, format="%Y-%m-%d_%H:%M:%OS")]
trades[, time := as.POSIXct(time, format="%Y-%m-%d_%H:%M:%OS")]

关于python - 是否有与 Python 的 pandas.merge_asof 等效的 R 语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58538114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com