熊猫.石斑鱼# 熊猫类 。石斑鱼( * args , ** kwargs ) [来源] # Grouper 允许用户为对象指定 groupby 指令。 该规范将通过关键参数选择列,或者如果给出了级别和/或轴参数,则选择目标对象索引的级别。 如果axis和/或level作为关键字传递给Grouper和 groupby ,则传递给Grouper的值优先。 参数: key str,默认为 NoneGroupby 键,选择目标的分组列。 级别名称/编号,默认为 None目标指数的水平。 freq str / 频率对象,默认为 None如果目标选择(通过键或级别)是类似日期时间的对象,这将按指定的频率进行分组。有关可用频率的完整规格,请参阅此处。 axis str,int,默认为0轴的编号/名称。 排序bool,默认为 False是否对结果标签进行排序。 关闭{'左'或'右'}区间结束封闭。仅当传递freq参数时。 标签{'左'或'右'}用于标记的间隔边界。仅当传递freq参数时。 约定{'开始', '结束', 'e', 's'}如果石斑鱼是PeriodIndex并且传递了freq参数。 origin时间戳或 str,默认 'start_day'调整分组的时间戳。来源时区必须与索引时区匹配。如果是字符串,则必须是以下之一: 'epoch':起源是 1970-01-01 'start':原点是时间序列的第一个值 'start_day':原点是时间序列午夜的第一天 'end':原点是时间序列的最后一个值 'end_day':原点是最后一天的最高午夜 1.3.0 版本中的新增功能。 offset Timedelta 或 str,默认为 None添加到原点的偏移时间增量。 dropna bool,默认 True如果为 True,并且组键包含 NA 值,则 NA 值与行/列一起将被删除。如果为 False,NA 值也将被视为组中的键。 返回: Grouper 或 pandas.api.typing.TimeGrouperfreq如果不是,则返回 TimeGrouper None。否则,将返回石斑鱼。 例子 df.groupby(pd.Grouper(key="Animal"))相当于df.groupby('Animal') >>> 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: 7min, 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: 17min, 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: 17min, 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: 17min, dtype: int64 如果要使用偏移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: 17min, 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: 17min, 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: 17min, dtype: int64