当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python pandas.Grouper用法及代码示例


用法:

class pandas.Grouper(*args, **kwargs)

Grouper 允许用户为对象指定 groupby 指令。

该规范将通过 key 参数选择一列,或者如果给出了 level 和/或 axis 参数,则选择目标对象的索引级别。

如果 axis 和/或 level 作为关键字传递给 Groupergroupby ,则传递给 Grouper 的值优先。

参数

keystr,默认为无

Groupby 键,选择目标的分组列。

level姓名/号码,默认为无

目标索引的级别。

freqstr /频率对象,默认为无

如果目标选择(通过键或级别)是datetime-like 对象,这将按指定的频率分组。有关可用频率的完整规格,请参见此处。

axisstr, int, 默认为 0

轴的编号/名称。

sort布尔值,默认为 False

是否对结果标签进行排序。

closed{‘left’ or ‘right’}

区间结束。仅当传递freq 参数时。

label{‘left’ or ‘right’}

用于标记的区间边界。仅当传递freq 参数时。

convention{‘start’, ‘end’, ‘e’, ‘s’}

如果 grouper 是 PeriodIndex 并且 freq 参数被传递。

base整数,默认 0

仅当传递freq 参数时。对于均匀细分 1 天的频率,聚合间隔的 “origin”。例如,对于‘5min’ 频率,base 的范围可以从 0 到 4。默认为 0。

loffsetstr, DateOffset, timedelta 对象

仅当传递freq 参数时。

origin时间戳或str,默认‘start_day’

调整分组的时间戳。原始时区必须与索引的时区匹配。如果是字符串,则必须是以下之一:

  • ‘epoch’:origin 是 1970-01-01

  • ‘start’:origin 是时间序列的第一个值

  • ‘start_day’:origin 是时间序列午夜的第一天

  • ‘end’:origin 是时间序列的最后一个值

  • ‘end_day’:origin是最后一天的天花板午夜

offsetTimedelta 或 str,默认为 None

添加到原点的偏移时间增量。

dropna布尔值,默认为真

如果为 True,并且组键包含 NA 值,则 NA 值连同行/列将被删除。如果为 False,NA 值也将被视为组中的键。

返回

groupby 指令的规范

例子

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

>>> df = pd.DataFrame(
...     {
...         "Animal":["Falcon", "Parrot", "Falcon", "Falcon", "Parrot"],
...         "Speed":[100, 5, 200, 300, 15],
...     }
... )
>>> df
   Animal  Speed
0  Falcon    100
1  Parrot      5
2  Falcon    200
3  Falcon    300
4  Parrot     15
>>> df.groupby(pd.Grouper(key="Animal")).mean()
        Speed
Animal
Falcon  200.0
Parrot   10.0

在“发布日期”列上指定重采样操作

>>> df = pd.DataFrame(
...    {
...        "Publish date":[
...             pd.Timestamp("2000-01-02"),
...             pd.Timestamp("2000-01-02"),
...             pd.Timestamp("2000-01-09"),
...             pd.Timestamp("2000-01-16")
...         ],
...         "ID":[0, 1, 2, 3],
...         "Price":[10, 20, 30, 40]
...     }
... )
>>> df
  Publish date  ID  Price
0   2000-01-02   0     10
1   2000-01-02   1     20
2   2000-01-09   2     30
3   2000-01-16   3     40
>>> df.groupby(pd.Grouper(key="Publish date", freq="1W")).mean()
               ID  Price
Publish date
2000-01-02    0.5   15.0
2000-01-09    2.0   30.0
2000-01-16    3.0   40.0

如果要根据固定时间戳调整 bin 的开始:

>>> start, end = '2000-10-01 23:30:00', '2000-10-02 00:30:00'
>>> rng = pd.date_range(start, end, freq='7min')
>>> ts = pd.Series(np.arange(len(rng)) * 3, index=rng)
>>> ts
2000-10-01 23:30:00     0
2000-10-01 23:37:00     3
2000-10-01 23:44:00     6
2000-10-01 23:51:00     9
2000-10-01 23:58:00    12
2000-10-02 00:05:00    15
2000-10-02 00:12:00    18
2000-10-02 00:19:00    21
2000-10-02 00:26:00    24
Freq:7T, dtype:int64
>>> ts.groupby(pd.Grouper(freq='17min')).sum()
2000-10-01 23:14:00     0
2000-10-01 23:31:00     9
2000-10-01 23:48:00    21
2000-10-02 00:05:00    54
2000-10-02 00:22:00    24
Freq:17T, dtype:int64
>>> ts.groupby(pd.Grouper(freq='17min', origin='epoch')).sum()
2000-10-01 23:18:00     0
2000-10-01 23:35:00    18
2000-10-01 23:52:00    27
2000-10-02 00:09:00    39
2000-10-02 00:26:00    24
Freq:17T, dtype:int64
>>> ts.groupby(pd.Grouper(freq='17min', origin='2000-01-01')).sum()
2000-10-01 23:24:00     3
2000-10-01 23:41:00    15
2000-10-01 23:58:00    45
2000-10-02 00:15:00    45
Freq:17T, dtype:int64

如果要使用 offset Timedelta 调整 bin 的开始,则以下两行是等效的:

>>> ts.groupby(pd.Grouper(freq='17min', origin='start')).sum()
2000-10-01 23:30:00     9
2000-10-01 23:47:00    21
2000-10-02 00:04:00    54
2000-10-02 00:21:00    24
Freq:17T, dtype:int64
>>> ts.groupby(pd.Grouper(freq='17min', offset='23h30min')).sum()
2000-10-01 23:30:00     9
2000-10-01 23:47:00    21
2000-10-02 00:04:00    54
2000-10-02 00:21:00    24
Freq:17T, dtype:int64

要替换已弃用的 base 参数的使用,您现在可以使用 offset ,在此示例中等效于 base=2

>>> ts.groupby(pd.Grouper(freq='17min', offset='2min')).sum()
2000-10-01 23:16:00     0
2000-10-01 23:33:00     9
2000-10-01 23:50:00    36
2000-10-02 00:07:00    39
2000-10-02 00:24:00    24
Freq:17T, dtype:int64

相关用法


注:本文由纯净天空筛选整理自pandas.pydata.org大神的英文原创作品 pandas.Grouper。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。