当需要将时间序列数据从一个频率转换为另一个频率时,可以使用重采样技术。下面是一个示例,演示如何将每日的股票价格数据重采样为每周的平均价格数据:
import pandas as pd
# 创建示例数据
data = {
'date': pd.date_range(start='2023-01-01', periods=30, freq='D'),
'price': [100, 110, 105, 120, 115, 130, 125, 140, 135, 150, 145, 160, 155,
170, 165, 180, 175, 190, 185, 200, 195, 210, 205, 220, 215, 230,
225, 240, 235, 250]
}
df = pd.DataFrame(data)
# 将日期列设置为索引
df.set_index('date', inplace=True)
# 将每日数据重采样为每周数据,计算平均价格
weekly_data = df.resample('W').mean()
# 打印结果
print(weekly_data)
结果:
price date 2023-01-01 100.000000 2023-01-08 120.714286 2023-01-15 154.285714 2023-01-22 190.714286 2023-01-29 224.285714 2023-02-05 250.000000
对应的excel:
在重采样的例子中,2023-01-01
和 2023-02-05
的值不是平均值,而是原始数据在该时间点的值。
当使用 resample()
方法进行重采样时,默认情况下,Pandas 会将重采样后的数据对齐到重采样周期的起始点。这意味着重采样结果的索引将是重采样周期的起始日期。
在您提供的数据中,重采样的频率是每周 ('W'
),因此重采样结果的索引将是每周的起始日期。在这个例子中,2023-01-01
是第一个周的起始日期,而 2023-02-05
是最后一个周的起始日期。
这就是为什么 2023-01-01
和 2023-02-05
的值与其他日期的值不同。它们是原始数据在对应周起始日期的值,而不是该周的平均值。
对于其他日期,它们是计算该周内所有数据的平均值得到的。
非常抱歉之前给您带来的混淆,感谢您的指正。请知悉 2023-01-01
和 2023-02-05
的值是原始数据在对应周起始日期的值,而其他日期的值是该周内数据的平均值。