在 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
值来演示不同的分组方式。
通过这些不同的频率,你可以轻松地对时间序列数据进行按天、周、月、季度、年等不同粒度的聚合和分析,帮助在实际项目中进行更精细的数据分析。