亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算 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 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號