Skip to content

频率转换

频率转换是时间序列分析中的重要操作,用于改变数据的时间粒度。

常用频率别名

别名说明
D日历日
B工作日
W
M月末
Q季末
A年末
H小时
T分钟
S

降采样

python
import pandas as pd
import numpy as np

# 创建日频数据
dates = pd.date_range('2024-01-01', periods=30, freq='D')
df = pd.DataFrame({
    '销售额': np.random.randint(100, 200, 30)
}, index=dates)

# 日转周
weekly = df.resample('W').sum()
print(weekly)

# 日转月
monthly = df.resample('M').agg({
    '销售额': ['sum', 'mean', 'max', 'min']
})
print(monthly)

# 日转季度
quarterly = df.resample('Q').mean()
print(quarterly)

升采样

python
# 创建周频数据
weeks = pd.date_range('2024-01-01', periods=4, freq='W')
df_weekly = pd.DataFrame({'值': [100, 120, 110, 130]}, index=weeks)

# 周转日(填充方法)
daily_ffill = df_weekly.resample('D').ffill()
print(daily_ffill)

daily_bfill = df_weekly.resample('D').bfill()
print(daily_bfill)

# 插值
daily_interp = df_weekly.resample('D').interpolate()
print(daily_interp)

聚合函数

python
dates = pd.date_range('2024-01-01', periods=10, freq='D')
df = pd.DataFrame({
    'A': range(10),
    'B': range(10, 20)
}, index=dates)

# 多种聚合方式
result = df.resample('W').agg({
    'A': 'sum',
    'B': ['mean', 'std']
})
print(result)

# 自定义聚合函数
result = df.resample('W').agg({
    'A': lambda x: x.max() - x.min()
})
print(result)

偏移量

python
from pandas.tseries.offsets import *

# 月末
end_of_month = MonthEnd()

# 月初
begin_of_month = MonthBegin()

# 季末
end_of_quarter = QuarterEnd()

# 工作日
business_day = BDay()

# 应用偏移
dates = pd.date_range('2024-01-15', periods=3)
print(dates + end_of_month)
print(dates + business_day)

实际应用

python
# 股票价格重采样
stock_data = pd.DataFrame({
    '价格': [100, 102, 101, 105, 103, 107, 106, 108]
}, index=pd.date_range('2024-01-01', periods=8, freq='H'))

# 计算OHLC(开盘、最高、最低、收盘)
ohlc = stock_data.resample('D').ohlc()
print(ohlc)

# 计算日收益率
daily_return = stock_data.resample('D').last().pct_change()
print(daily_return)

频率转换是时间序列分析的基础技能,可以根据分析需求灵活调整数据粒度。