python - 在 pandas 中计算 OHLC 数据
问题描述
我有一个 CSV 文件:
_id,ltp,volume,time
5f4dde2e9f742701e3d9a15c,214.55,29077675,2020-09-01T11:07:50.000Z
5f4dde2f9f742701e3d9a15d,214.55,29077690,2020-09-01T11:07:50.000Z
5f4dde2f9f742701e3d9a15e,214.65,29077690,2020-09-01T11:07:51.000Z
5f4dde309f742701e3d9a15f,214.65,29077900,2020-09-01T11:07:51.000Z
5f4dde309f742701e3d9a160,214.6,29077900,2020-09-01T11:07:52.000Z
5f4dde319f742701e3d9a161,214.7,29078191,2020-09-01T11:07:53.000Z
5f4dde329f742701e3d9a162,214.6,29078769,2020-09-01T11:07:54.000Z
5f4dde339f742701e3d9a163,214.65,29078832,2020-09-01T11:07:55.000Z
我需要根据OHLC
这些数据计算给定间隔的 。open
是区间中的第一个元素,high
是最大值,low
是最小值,close
是最后一个。
这是通过以下与此类似的代码来实现的:
data = df.resample('1T').agg({'ltp': ['first', 'max', 'min', 'last'], 'volume': 'sum'})
问题 1:我无法使用上面的代码将打开、高、低、关闭列分开,它位于“ltp”列内。为了访问open
我需要写data['ltp']['first']
. (不过这是个小问题可以忽略)
问题 2:主要问题是在计算volume
当前我有sum
但实际上我想要实现的是这个,例如volume
at 10:01:00
is100
和 at 10:02:00
is 200
so total volume for that time frame is 200-100 = 100
,我怎么能做到这一点?
解决方案
对于您的第一个问题,您只需重命名列或删除一个级别。对于第二个问题,取第一个和最后一个并计算差异:
df = pd.DataFrame([["5f4dde2e9f742701e3d9a15c",214.55,29077675,"2020-09-01T11:07:50.000Z"],
["5f4dde2f9f742701e3d9a15d",214.55,29077690,"2020-09-01T11:07:50.000Z"],
["5f4dde2f9f742701e3d9a15e",214.65,29077690,"2020-09-01T11:07:51.000Z"],
["5f4dde309f742701e3d9a15f",214.65,29077900,"2020-09-01T11:07:51.000Z"],
["5f4dde309f742701e3d9a160",214.6,29077900,"2020-09-01T11:07:52.000Z"],
["5f4dde319f742701e3d9a161",214.7,29078191,"2020-09-01T11:07:53.000Z"],
["5f4dde329f742701e3d9a162",214.6,29078769,"2020-09-01T11:07:54.000Z"],
["5f4dde339f742701e3d9a163",214.65,29078832,"2020-09-01T11:07:55.000Z"]], columns = ["_id","ltp","volume","time"])
df["time"] = pd.to_datetime(df["time"])
df = df.set_index("time")
data = df.resample('1S').agg({'ltp': ['first', 'max', 'min', 'last'], 'volume': ['first','last']})
data.columns = ["_".join(x) for x in data.columns.ravel()]
data["volumne_metric"] = data["volume_last"]-data["volume_first"]
输出:
ltp_first ltp_max ltp_min ltp_last volume_first volume_last volumne_metric
time
2020-09-01 11:07:50+00:00 214.55 214.55 214.55 214.55 29077675 29077690 15
2020-09-01 11:07:51+00:00 214.65 214.65 214.65 214.65 29077690 29077900 210
2020-09-01 11:07:52+00:00 214.60 214.60 214.60 214.60 29077900 29077900 0
2020-09-01 11:07:53+00:00 214.70 214.70 214.70 214.70 29078191 29078191 0
2020-09-01 11:07:54+00:00 214.60 214.60 214.60 214.60 29078769 29078769 0
2020-09-01 11:07:55+00:00 214.65 214.65 214.65 214.65 29078832 29078832 0
推荐阅读
- unit-testing - 基于方法前置/后置条件的自动单元测试生成工具/技术
- python - 这两种创建数组的方式有什么区别吗?
- java - 在 SQLite 中处理读/写用户数据的最佳实践是什么?
- symfony - 控制器(服务)没有在 Symfony 项目上注入依赖项
- javascript - css 不是 AngularJS 中现有元素的函数
- spring - 基于 Spring Security URL 的授权
- vue.js - 外部 css 表覆盖默认的 Vuetify 组件样式
- python - 如何将文件中的函数导入木星笔记本?
- testing - 如何使用自动化测试 activiti 框架?
- java - 如何显示两个骰子