Python Pandas pandas.Grouper函数方法的使用

Python的Pandas库中,pandas.Grouper 是一个非常有用的工具,特别适用于处理时间序列数据,以及当你需要对数据进行更复杂的分组操作时。它允许你按日期时间信息进行分组,并指定分组的频率。本文主要介绍一下Pandas中pandas.Grouper方法的使用。

class pandas.Grouper ( key = None,level = None,freq = None,axis = 0,sort = False )  [source]

Grouper允许用户为目标对象指定groupby指令
此规范将通过key参数选择列,或者如果给出了levelaxis参数,则指定了目标对象的索引级别。
这些是本地设置,将覆盖“全局”设置,即传递给groupby本身的轴参数和level。

参数

keystr,默认为None

groupby键,用于选择目标的分组列

level:名称/数字,默认为None

目标索引的级别

freqstr / frequency对象,默认为None

如果目标选择(通过keylevel)是类似日期时间的对象,

则将按指定的频率进行分组。

有关可用频率的完整说明,请参见此处

axis : 轴的编号/名称,默认为0

sort:布尔值,默认为False

是否对生成的标签进行排序

额外的kwargs来控制类似时间的groupers(当``freq``通过时)

closed  : 区间的封闭结束; 'left' 还是 'right'

label : 用于标记的区间边界; 'left'还是'right'

convention{'start','end','e','s'}

如果groupersPeriodIndex

base, loffset

返回

groupby指令的规范

例如,

1)语法糖 df.groupby('A')

>>> df.groupby(Grouper(key='A'))

2)按月分组求和

import pandas as pd

# 创建示例数据
data = {
    'date': pd.date_range(start='1/1/2020', periods=100, freq='D'),
    'value': range(100)
}
df = pd.DataFrame(data)

print(df.head())

# 使用 Grouper 按月分组并计算每月的总和
monthly_sum = df.groupby(pd.Grouper(key='date', freq='M')).sum()

print(monthly_sum)

3)按季度分组

import pandas as pd

# 创建示例数据
data = {
    'date': pd.date_range(start='1/1/2020', periods=100, freq='D'),
    'value': range(100)
}
df = pd.DataFrame(data)

print(df.head())

# 使用 Grouper 按季度分组并计算每季度的平均值
quarterly_mean = df.groupby(pd.Grouper(key='date', freq='Q')).mean()

print(quarterly_mean)

4)分组和汇总

import pandas as pd

# 创建示例数据
data = {
    'start_date': pd.date_range(start='2020-01-01', periods=6, freq='M'),
    'end_date': pd.date_range(start='2020-12-31', periods=6, freq='2M'),
    'value': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)

print("Original DataFrame:")
print(df)

# 使用两个 Grouper 按不同的时间频率对 DataFrame 进行分组
grouped = df.groupby([
    pd.Grouper(key='start_date', freq='M'),  # 按每月分组
    pd.Grouper(key='end_date', freq='A')     # 按每年分组
]).sum()

print("Grouped DataFrame:")
print(grouped)

推荐阅读
cjavapy编程之路首页