- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
kdb+ 有一个 aj通常用于沿时间列连接表的函数。
这是一个例子,我有交易和报价表,我得到了每笔交易的现行报价。
q)5# t
time sym price size
-----------------------------
09:30:00.439 NVDA 13.42 60511
09:30:00.439 NVDA 13.42 60511
09:30:02.332 NVDA 13.42 100
09:30:02.332 NVDA 13.42 100
09:30:02.333 NVDA 13.41 100
q)5# q
time sym bid ask bsize asize
-----------------------------------------
09:30:00.026 NVDA 13.34 13.44 3 16
09:30:00.043 NVDA 13.34 13.44 3 17
09:30:00.121 NVDA 13.36 13.65 1 10
09:30:00.386 NVDA 13.36 13.52 21 1
09:30:00.440 NVDA 13.4 13.44 15 17
q)5# aj[`time; t; q]
time sym price size bid ask bsize asize
-----------------------------------------------------
09:30:00.439 NVDA 13.42 60511 13.36 13.52 21 1
09:30:00.439 NVDA 13.42 60511 13.36 13.52 21 1
09:30:02.332 NVDA 13.42 100 13.34 13.61 1 1
09:30:02.332 NVDA 13.42 100 13.34 13.61 1 1
09:30:02.333 NVDA 13.41 100 13.34 13.51 1 1
如何使用 pandas 执行相同的操作?我正在使用索引为 datetime64 的交易和报价数据框。
In [55]: quotes.head()
Out[55]:
bid ask bsize asize
2012-09-06 09:30:00.026000 13.34 13.44 3 16
2012-09-06 09:30:00.043000 13.34 13.44 3 17
2012-09-06 09:30:00.121000 13.36 13.65 1 10
2012-09-06 09:30:00.386000 13.36 13.52 21 1
2012-09-06 09:30:00.440000 13.40 13.44 15 17
In [56]: trades.head()
Out[56]:
price size
2012-09-06 09:30:00.439000 13.42 60511
2012-09-06 09:30:00.439000 13.42 60511
2012-09-06 09:30:02.332000 13.42 100
2012-09-06 09:30:02.332000 13.42 100
2012-09-06 09:30:02.333000 13.41 100
我看到 pandas 有一个 asof 函数,但它没有在 DataFrame 上定义,只在 Series 对象上定义。我想可以循环遍历每个 Series 并将它们一一对齐,但我想知道是否有更好的方法?
最佳答案
前段时间我写了一个广告不足的 ordered_merge
函数:
In [27]: quotes
Out[27]:
time bid ask bsize asize
0 2012-09-06 09:30:00.026000 13.34 13.44 3 16
1 2012-09-06 09:30:00.043000 13.34 13.44 3 17
2 2012-09-06 09:30:00.121000 13.36 13.65 1 10
3 2012-09-06 09:30:00.386000 13.36 13.52 21 1
4 2012-09-06 09:30:00.440000 13.40 13.44 15 17
In [28]: trades
Out[28]:
time price size
0 2012-09-06 09:30:00.439000 13.42 60511
1 2012-09-06 09:30:00.439000 13.42 60511
2 2012-09-06 09:30:02.332000 13.42 100
3 2012-09-06 09:30:02.332000 13.42 100
4 2012-09-06 09:30:02.333000 13.41 100
In [29]: ordered_merge(quotes, trades)
Out[29]:
time bid ask bsize asize price size
0 2012-09-06 09:30:00.026000 13.34 13.44 3 16 NaN NaN
1 2012-09-06 09:30:00.043000 13.34 13.44 3 17 NaN NaN
2 2012-09-06 09:30:00.121000 13.36 13.65 1 10 NaN NaN
3 2012-09-06 09:30:00.386000 13.36 13.52 21 1 NaN NaN
4 2012-09-06 09:30:00.439000 NaN NaN NaN NaN 13.42 60511
5 2012-09-06 09:30:00.439000 NaN NaN NaN NaN 13.42 60511
6 2012-09-06 09:30:00.440000 13.40 13.44 15 17 NaN NaN
7 2012-09-06 09:30:02.332000 NaN NaN NaN NaN 13.42 100
8 2012-09-06 09:30:02.332000 NaN NaN NaN NaN 13.42 100
9 2012-09-06 09:30:02.333000 NaN NaN NaN NaN 13.41 100
In [32]: ordered_merge(quotes, trades, fill_method='ffill')
Out[32]:
time bid ask bsize asize price size
0 2012-09-06 09:30:00.026000 13.34 13.44 3 16 NaN NaN
1 2012-09-06 09:30:00.043000 13.34 13.44 3 17 NaN NaN
2 2012-09-06 09:30:00.121000 13.36 13.65 1 10 NaN NaN
3 2012-09-06 09:30:00.386000 13.36 13.52 21 1 NaN NaN
4 2012-09-06 09:30:00.439000 13.36 13.52 21 1 13.42 60511
5 2012-09-06 09:30:00.439000 13.36 13.52 21 1 13.42 60511
6 2012-09-06 09:30:00.440000 13.40 13.44 15 17 13.42 60511
7 2012-09-06 09:30:02.332000 13.40 13.44 15 17 13.42 100
8 2012-09-06 09:30:02.332000 13.40 13.44 15 17 13.42 100
9 2012-09-06 09:30:02.333000 13.40 13.44 15 17 13.41 100
它可以很容易地(好吧,对于熟悉代码的人来说)扩展为模仿 KDB 的“左连接”。我意识到在这种情况下,前向填写贸易数据是不合适的;只是说明功能。
关于python - KDB+ 像 asof 一样加入 pandas 中的时间序列数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12322289/
我有两个 pandas 数据框 X 和 Y,每个都包含过去一个月的日内价格和时间数据。我想在 X 上运行 Y 的连接,即每次我们看到 X 的更新时我们都采用 Y 的现行价格。我想运行日内分析(因为隔夜
我已经阅读了 Pandas 的文档。有一个有用的函数叫做 merge_asof这似乎将两个数据帧与靠近的行合并在一起。但我不知道是什么asof方法。是吗as of ?或者它是某种东西的缩写? http
我希望做一些类似 Pandas 的事情 merge_asof 或 QuestDB 的 ASOF JOIN 在 Julia 。 至关重要的是,我还需要应用分组操作 . 我很乐意使用 Julia 的任何
我有每个实体的时间序列数据: id event_date value 1 2013-12-21 3.82 1 2013-12-22 2.47 1 2013-12-25 2.13
我有一大堆时间间隔不规则的数据帧。 我想创建一个新的 data.frame 并将其他 data.frame 加入其中,对于加入的每个 data.frame,从新的 data.frame 中选取最新的值
我有两个数据框,我希望将它们连接在一起,其中左侧数据框的信息索引为(日期,ID),右侧数据框的信息索引为(期间,ID),其中期间为年月。 我最终对左帧按 ID 进行分组,迭代组,在右帧上选择相同的组,
aj[`time`sym;trade;quote] 将每笔交易与之前的报值(value)连接起来。 我想进行相同的连接,但是是在下一个引用值而不是前一个值上进行连接。 我怎样才能实现这个目标? 最佳答
我见过这个问题被问过几次,但没有答案。简短版本: 我有一个带有两级MultiIndex索引的pandas DataFrame;两个级别都是整数。如何在此 DataFrame 上使用 .asof()?
kdb+ 有一个 aj通常用于沿时间列连接表的函数。 这是一个例子,我有交易和报价表,我得到了每笔交易的现行报价。 q)5# t time sym price size ------
我对excel一无所知,我想知道是否有一种方法可以将q-coding中的asof join语句转换为使用excel公式的语句 :update string issueSeries from aj[`s
我在传递 datetime 时遇到问题进入Pandas.Series.asof : def valueAsOf(self, date): if type(date) is str:
如何使用Series.asof函数?我传入了一个 datetime 对象 datetime.strptime('20150101', '%Y%m%d'),但为什么会报错 File "/Users/
我是一名优秀的程序员,十分优秀!