python - 在熊猫中重新采样后进行汇总
问题描述
我有这个文件,其中包含货币对的买入/卖出价格(片段):
RateDateTime RateBid RateAsk
2020-01-22 00:00:00.5945505 0.849190 0.849450
2020-01-22 00:00:00.5945526 0.849080 0.849520
2020-01-22 00:00:00.5945537 0.849040 0.849600
2020-01-22 00:00:00.5945552 0.849290 0.849610
2020-01-22 00:00:00.5946302 0.849300 0.849610
2020-01-22 00:00:02.5946370 0.849400 0.849610
2020-01-22 00:00:04.5946408 0.849400 0.849540
2020-01-22 00:00:04.5946432 0.849590 0.849730
2020-01-22 00:00:04.5946435 0.849160 0.849730
2020-01-22 00:00:04.5946438 0.849570 0.849940
2020-01-22 00:00:22.5946828 0.849560 0.849940
2020-01-22 00:00:37.5947048 0.849570 0.849940
我编写了这个脚本来提取日期时间、买入价和卖出价,并找到 30 秒间隔的平均价格和首次买入价和卖出价:
from datetime import datetime as dt
import pandas as pd
import re
date = []
bid = []
ask = []
time_format = "%Y-%m-%d %H:%M:%S"
with open("2020-01-22_pro_EURGBP.txt", "r") as prices:
next(prices)
for line in prices:
date_string = re.findall("\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}", line)[0]
date_parsed = dt.strptime(date_string, time_format)
date.append(date_parsed)
split = line.split()
bid.append(split[2])
ask.append(split[3])
df = pd.DataFrame({"Bid": bid, "Ask": ask}, dtype="float64", index=date)
mean = df.resample("30S").mean()
first = df.resample("30S").first()
final = pd.merge(mean, first, left_index=True, right_index=True)
final = final.rename(
columns={
"Bid_x": "Average Bid",
"Ask_x": "Average Ask",
"Bid_y": "First Bid",
"Ask_y": "First Ask",
}
)
final = final.rename_axis("Datetime")
print(final)
使用以下输出片段:
Average Bid Average Ask First Bid First Ask
Datetime
2020-01-22 00:00:00 0.849325 0.849662 0.84919 0.84945
2020-01-22 00:00:30 0.849570 0.849937 0.84957 0.84994
2020-01-22 00:01:00 0.849501 0.849819 0.84956 0.84994
但是,例如,对于 00:00:00 到 00:00:29.9999999 之间的时间,我希望它向上舍入到 00:00:30 窗口,从 00:00:30 到 00:00:59.9999999 到 00: 01:00 窗口等。我不知道如何解决这个问题。
解决方案
如果您使用 pandas 的日期时间,则可以使用 round 方法:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DatetimeIndex.round.html
https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases
就像是:
date.round('min')
推荐阅读
- tableau-api - 如何检查已发布数据源中的哪些字段在 Tableau Server 中的不同工作簿中使用?
- apache-flink - org.apache.flink.streaming.runtime.tasks.AsynchronousException:处理计时器时捕获异常
- redis - springboot 使用 lua 创建 redis 布隆过滤器:@user_script:1: ERR bad error rate
- flutter - 如何将联系人导入我的颤振短信发件人应用程序?
- asynchronous - context.job_queue.run_once 在 Python Telegram BOT API 中不起作用
- pandas - 创建一个循环来检查熊猫中的列输入
- python - 将数字列的计数计算为新列 Pandas DataFrame
- python - 保持分类变量的原始顺序
- python - Django forms with CSRF protection in IOS 14+
- c# - 模拟 Redlock.CreateAsync 不返回模拟对象