Appearance
频率转换
频率转换是时间序列分析中的重要操作,用于改变数据的时间粒度。
常用频率别名
| 别名 | 说明 |
|---|---|
| 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)频率转换是时间序列分析的基础技能,可以根据分析需求灵活调整数据粒度。