用法:
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。