用法:
class pandas.Grouper(*args, **kwargs)
Grouper 允许用户为对象指定 groupby 指令。
该规范将通过 key 参数选择一列,或者如果给出了 level 和/或 axis 参数,则选择目标对象的索引级别。
如果
axis
和/或level
作为关键字传递给Grouper
和groupby
,则传递给Grouper
的值优先。- key:str,默认为无
Groupby 键,选择目标的分组列。
- level:姓名/号码,默认为无
目标索引的级别。
- freq:str /频率对象,默认为无
如果目标选择(通过键或级别)是datetime-like 对象,这将按指定的频率分组。有关可用频率的完整规格,请参见此处。
- axis:str, 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。- loffset:str, DateOffset, timedelta 对象
仅当传递
freq
参数时。- origin:时间戳或str,默认‘start_day’
调整分组的时间戳。原始时区必须与索引的时区匹配。如果是字符串,则必须是以下之一:
‘epoch’:
origin
是 1970-01-01‘start’:
origin
是时间序列的第一个值‘start_day’:
origin
是时间序列午夜的第一天
‘end’:
origin
是时间序列的最后一个值‘end_day’:
origin
是最后一天的天花板午夜
- offset:Timedelta 或 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
相关用法
- Python pandas.arrays.IntervalArray.is_empty用法及代码示例
- Python pandas.DataFrame.ewm用法及代码示例
- Python pandas.api.types.is_timedelta64_ns_dtype用法及代码示例
- Python pandas.DataFrame.dot用法及代码示例
- Python pandas.DataFrame.apply用法及代码示例
- Python pandas.DataFrame.combine_first用法及代码示例
- Python pandas.read_pickle用法及代码示例
- Python pandas.Index.value_counts用法及代码示例
- Python pandas.DatetimeTZDtype用法及代码示例
- Python pandas.DataFrame.cumsum用法及代码示例
- Python pandas.Interval.is_empty用法及代码示例
- Python pandas.api.indexers.FixedForwardWindowIndexer用法及代码示例
- Python pandas.core.resample.Resampler.nearest用法及代码示例
- Python pandas.Series.add_prefix用法及代码示例
- Python pandas.Period.strftime用法及代码示例
- Python pandas.Series.map用法及代码示例
- Python pandas.Series.max用法及代码示例
- Python pandas.DataFrame.rename用法及代码示例
- Python pandas.DataFrame.to_numpy用法及代码示例
- Python pandas.Period.dayofyear用法及代码示例
注:本文由纯净天空筛选整理自pandas.pydata.org大神的英文原创作品 pandas.Grouper。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。