【发布时间】:2019-12-27 06:01:24
【问题描述】:
我有以下数据
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
date_today = pd.Timestamp(1513393355.5, unit='s')
days = pd.date_range(date_today, date_today + timedelta(1), freq='s')
np.random.seed(seed=1111)
data_price = np.random.randint(2, high=10, size=len(days))
data_quantity = np.random.randint(2, high=100, size=len(days))
df = pd.DataFrame({'ts': days, 'price': data_price, 'quantity': data_quantity})
df = df.set_index('ts')
print(df.head())
price quantity
ts
2017-12-16 03:02:35.500 6 30
2017-12-16 03:02:36.500 9 18
2017-12-16 03:02:37.500 7 85
2017-12-16 03:02:38.500 3 51
2017-12-16 03:02:39.500 6 19
我想将数据重新采样为10分钟间隔,按价格升序排列每个10分钟窗口内的观察值,排序后取前20%的数据,然后计算加权平均价格(即价格加权按数量),以及前 20% 数据的数量之和。
有一个解决方案here 使用 groupby 函数来计算加权平均价格。但我想将加权平均值应用于前 20% 的数据。
我想在静态的基础上(即应用 pandas 重新采样功能)并以滚动方式每 1 分钟执行一次,并有 10 分钟的回溯期。
如何使用 pandas 优雅地做到这一点?我对如何在重采样窗口中进行排名感到困惑。
谢谢!
【问题讨论】:
-
您是在寻找滚动的 10 分钟间隔,还是固定的,只是将数据分成 10 分钟的片段?
-
@calestini 实际上两者的解决方案将不胜感激。我会更新问题
标签: pandas aggregate pandas-groupby resampling