为了账号安全,请及时绑定邮箱和手机立即绑定

计算 pandas 中的 OHLC 数据

计算 pandas 中的 OHLC 数据

慕工程0101907 2023-07-05 15:27:26
我有一个 CSV 文件:_id,ltp,volume,time5f4dde2e9f742701e3d9a15c,214.55,29077675,2020-09-01T11:07:50.000Z5f4dde2f9f742701e3d9a15d,214.55,29077690,2020-09-01T11:07:50.000Z5f4dde2f9f742701e3d9a15e,214.65,29077690,2020-09-01T11:07:51.000Z5f4dde309f742701e3d9a15f,214.65,29077900,2020-09-01T11:07:51.000Z5f4dde309f742701e3d9a160,214.6,29077900,2020-09-01T11:07:52.000Z5f4dde319f742701e3d9a161,214.7,29078191,2020-09-01T11:07:53.000Z5f4dde329f742701e3d9a162,214.6,29078769,2020-09-01T11:07:54.000Z5f4dde339f742701e3d9a163,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:我无法将 open、high、low、close 列与上面的代码分开,它位于“ltp”列内。为了访问open我需要写data['ltp']['first']。(不过这是一个小问题,可以忽略)问题2:主要问题是当前计算时volume我有sum,但实际上我想要实现的是这个,例如volumeat 10:01:00is100和at is10:02:00所以200该时间范围的总体积是200-100 = 100,我怎样才能实现这个?
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

对于第一个问题,您只需重命名列或删除一个级别。对于第二个问题,取第一个和最后一个并计算差异:


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



查看完整回答
反对 回复 2023-07-05
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信