在 pandas.Grouper() 中,freq 参数用于指定时间频率,它定义了如何对时间序列数据进行分组。freq 的值可以是多种时间单位,具体包括以下几类:
常见的时间频率 (freq) 取值:
1. 日频率(Daily)
'D':按天分组。
2. 周频率(Weekly)
'W':按周分组,默认从星期天开始。'W-MON','W-TUE', …,'W-SUN':按周分组,指定周的起始日期(比如'W-MON'表示从周一开始的周)。
3. 月频率(Monthly)
'M':按月分组,通常指从每月的最后一天开始。'MS':按月开始分组,即从每月的第一天开始。'B':按工作日(月内的工作日)分组。
4. 季节频率(Quarterly)
'Q':按季度分组,通常指每年四个季度的最后一天。'QS':按季度开始分组,即从每个季度的第一天开始。'Q-JAN','Q-FEB', …,'Q-DEC':按指定的季度开始时间分组。
5. 年频率(Yearly)
'A'或'Y':按年分组,通常指每年的最后一天。'AS'或'YS':按年开始分组,即从每年的第一天开始。'A-JAN','A-FEB', …,'A-DEC':按指定月份开始的年度分组。
6. 小时、分钟、秒(Hourly, Minute, Second)
'H':按小时分组。'T'或'min':按分钟分组。'S':按秒分组。'L'或'ms':按毫秒分组。'U'或'us':按微秒分组。
7. 自定义频率(Custom Frequencies)
'B':按工作日分组(排除周末)。'CB':按日历工作日分组(排除周六和周日,包含假期)。'WOM-1MON'、'WOM-2MON':按周的某个位置分组(例如第一个周一,第二个周一等)。
8. 其他一些特殊频率(Extra Frequencies)
'BM':按工作日的月度频率分组。'CBM':按日历工作日的月度频率分组。'MS':按月的开始日分组。'Q-JAN':按季度的开始月份分组。
举例:
import pandas as pd# 创建一个时间序列数据
data = {'date': pd.date_range('2023-01-01', periods=10, freq='D'),'value': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
}
df = pd.DataFrame(data)# 按月分组(freq='M')
monthly_group = df.groupby(pd.Grouper(key='date', freq='M')).sum()
print(monthly_group)# 按季度分组(freq='Q')
quarterly_group = df.groupby(pd.Grouper(key='date', freq='Q')).sum()
print(quarterly_group)# 按年分组(freq='A')
yearly_group = df.groupby(pd.Grouper(key='date', freq='A')).sum()
print(yearly_group)# 按周分组(freq='W')
weekly_group = df.groupby(pd.Grouper(key='date', freq='W')).sum()
print(weekly_group)# 按小时分组(freq='H')
hourly_group = df.groupby(pd.Grouper(key='date', freq='H')).sum()
print(hourly_group)
常用频率总结:
freq | 描述 |
|---|---|
'D' | 按天分组 |
'W' | 按周分组 |
'M' | 按月分组 |
'Q' | 按季度分组 |
'A' | 按年分组 |
'H' | 按小时分组 |
'T' 或 'min' | 按分钟分组 |
'S' | 按秒分组 |
'B' | 按工作日分组 |
'CB' | 按日历工作日分组 |
'MS' | 按月的第一天分组 |
'QS' | 按季度的第一天分组 |
'A-JAN' | 每年从1月开始 |
'Q-JAN' | 按每年的1月季度开始分组 |
选择频率时的注意点:
freq参数适用于时间数据列(datetime64类型),因此输入的数据必须是时间序列数据。- 可以通过
pd.date_range()创建包含时间戳的 DataFrame,并用不同的freq值来演示不同的分组方式。
通过这些不同的频率,你可以轻松地对时间序列数据进行按天、周、月、季度、年等不同粒度的聚合和分析,帮助在实际项目中进行更精细的数据分析。