當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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