python - 重新采样/上采样周期索引并使用数据的两个极端时间 "edges"

标签 python parsing pandas

我有以下 DataFrame,一个带有周期索引的每周价格数据时间序列。我们称之为df

                            timestamp         open        high        low        close  volume
timestamp                       
2009-02-01/2009-02-07   733442.166309   830.540773  832.586910  828.788627  830.706009  48401.952790
2009-02-08/2009-02-14   733449.166309   839.945279  841.763948  837.812232  839.742489  53429.330472
2009-02-15/2009-02-21   733456.245777   790.733108  792.399775  788.897523  790.549550  50671.887387
2009-02-22/2009-02-28   733463.166309   760.586910  762.640558  758.234979  760.428112  60565.506438

如果我尝试使用 df.resample('30min').mean() 重新采样,数据将以 2009-02-22 结束。我希望它在 2009-02-28 结束,同时仍然在 2009-02-01 开始。我怎样才能做到这一点?
我怀疑这与重新采样函数的闭合值和标签值有关,但文档中没有很好地解释这些值。

这里是重建数据帧的片段:

import pandas as pd
from pandas import Period
dikt={'volume': {Period('2009-02-01/2009-02-07', 'W-SAT'): 48401.952789699571, Period('2009-02-08/2009-02-14', 'W-SAT'): 53429.330472103007, Period('2009-02-15/2009-02-21', 'W-SAT'): 50671.887387387389, Period('2009-02-22/2009-02-28', 'W-SAT'): 60565.506437768243}, 'close': {Period('2009-02-01/2009-02-07', 'W-SAT'): 830.70600858369096, Period('2009-02-08/2009-02-14', 'W-SAT'): 839.74248927038627, Period('2009-02-15/2009-02-21', 'W-SAT'): 790.54954954954951, Period('2009-02-22/2009-02-28', 'W-SAT'): 760.42811158798281}, 'open': {Period('2009-02-01/2009-02-07', 'W-SAT'): 830.54077253218884, Period('2009-02-08/2009-02-14', 'W-SAT'): 839.94527896995703, Period('2009-02-15/2009-02-21', 'W-SAT'): 790.73310810810813, Period('2009-02-22/2009-02-28', 'W-SAT'): 760.58690987124464}, 'high': {Period('2009-02-01/2009-02-07', 'W-SAT'): 832.58690987124464, Period('2009-02-08/2009-02-14', 'W-SAT'): 841.76394849785413, Period('2009-02-15/2009-02-21', 'W-SAT'): 792.39977477477476, Period('2009-02-22/2009-02-28', 'W-SAT'): 762.64055793991417}, 'low': {Period('2009-02-01/2009-02-07', 'W-SAT'): 828.78862660944208, Period('2009-02-08/2009-02-14', 'W-SAT'): 837.8122317596567, Period('2009-02-15/2009-02-21', 'W-SAT'): 788.89752252252254, Period('2009-02-22/2009-02-28', 'W-SAT'): 758.23497854077254}, 'timestamp': {Period('2009-02-01/2009-02-07', 'W-SAT'): 733442.16630901292, Period('2009-02-08/2009-02-14', 'W-SAT'): 733449.16630901292, Period('2009-02-15/2009-02-21', 'W-SAT'): 733456.24577702698, Period('2009-02-22/2009-02-28', 'W-SAT'): 733463.16630901292}}
pd.DataFrame(dikt, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])

最佳答案

因为您想包含 start_time对应第一个PeriodIndexend_time对应于最后一个,关键字参数出现在 DF.resample 中在这里没有什么帮助,因为它们本质上是一个整体/互斥的(意味着改变任何参数都会影响start_timeend_time,但不会同时影响两者)。

相反,您可以对这些进行下采样以获取当天频率,"D"然后在30分钟内对各组进行均值聚合。

df.resample('D').asfreq().resample('30T').mean()

convention如果跨 start_time 重新采样,则可以使用 arg或end_time具体要进行的。

<小时/>

检查:

resamp_start = df.resample('30min').mean()
resamp_all = df.resample('D').asfreq().resample('30T').mean().head(resamp_start.shape[0])
resamp_start.equals(resamp_all)
True
<小时/>

如果您只需要重新采样的索引而不需要它的聚合,那么将其当前频率下采样到与要重新采样的频率相对应的最低整数频率是有意义的[此处,1 分钟],然后每 30 行进行切片,为每个30 分钟样本计算此值。

df.resample('T').asfreq().iloc[::30]

这些将为您提供整个 2009-02-28 的样本。与之前的情况相比,其中日期截至但不包括 2009-02-28被考虑是由于 .resample('D') 期间实现的标准化(时间调整为午夜)操作。

关于python - 重新采样/上采样周期索引并使用数据的两个极端时间 "edges",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696355/

相关文章:

python - 无法使用 BigQuery Python API 设置目标表

python - 如何连接多个Dataframe

java - 以线程安全方式格式化日期抛出 java.text.ParseException :

python - 将多种日期格式转换为一种格式python

python - 将数据框中另一列的列移动一个数字

python - 每个 bin 中点数相等的直方图

c++ - 为什么要在套接字的 'recv' 方法上设置保守的最大字节大小?

java - 尝试从 Java 的输出中获取 URL

python - 堆积条形图更改 x 轴绘图数值

python - 计算滚动窗口中第一个值和最后一个值之间的差异