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


Python Pandas DataFrame resample方法用法及代碼示例


Pandas DataFrame.resample(~) 方法根據時間執行 group-by。這些參數本身很難解釋,因此我們建議查看我們的示例以進行澄清。

參數

1.rule | DateOffsetTimedeltastring

每組的時間長度。

2. axis | intstring | optional

是否對每行或列重新采樣:

說明

0"index"

對每一行重新采樣。

1"columns"

對每列重新采樣。

默認情況下,axis=0

3. closed | string | optional

bin區間的哪一側是封閉的:

說明

"right"

bin區間右側封閉(含)

"left"

bin 間隔的左側是封閉的

默認情況下, closed="left" ,但以下頻率偏移除外,默認情況下具有 closed="right"

‘M’, ‘A’, ‘Q’, ‘BM’, ‘BA’, ‘BQ’, and ‘W’

4. label | string | optional

bin 間隔的哪一側被標記:

說明

"right"

bin 間隔的右側已標記

"left"

bin 間隔的左側已標記

默認情況下, label=None ,但以下頻率偏移除外,默認情況下具有 label="right"

‘M’, ‘A’, ‘Q’, ‘BM’, ‘BA’, ‘BQ’, and ‘W’

5. convention | string | optional

僅當源 DataFrame 的索引為 PeriodIndex 時,這才相關。是否使用 PeriodIndex 的開始時間或結束時間:

說明

"s""start"

使用 PeriodIndex 的開始時間

"e""end"

使用 PeriodIndex 的結束時間

默認情況下,convention="start"

6. kind | Nonestring | optional

結果索引的數據類型:

說明

None

保留結果索引不變。

"timestamp"

將結果索引轉換為 DatetimeIndex

"period"

將結果索引轉換為 PeriodIndex

默認情況下,kind=None

7. loffset | timedelta | optional

應用在時間標簽上的偏移量。默認情況下,loffset=None

8. base | int | optional

第一組中包含的行數。查看示例以進行澄清。默認情況下,base=0

9. on | string | optional

用於重新采樣而不是索引的列。該列的類型必須是 datetime-like (例如 datetime64 )。默認情況下,索引將用於重采樣。

10.level | stringint | optional

用於重采樣的級別。僅當 DataFrame 具有多索引時,這才相關。 level 也必須是 datetime-like 類型(例如 datetime64 )。

返回值

Resampler 對象。

例子

考慮以下 DataFrame :

date_index = pd.date_range("2020/12/25", periods=4)
df = pd.DataFrame({"A":[2,3,4,5],"B":[6,7,8,9]}, index=date_index)
df



             A   B
2020-12-25   2   6
2020-12-26   3   7
2020-12-27   4   8
2020-12-28   5   9

這裏, df 的索引是 DatetimeIndex 類型。

基本用法

計算每組連續 2 天的總和:

df.resample(rule="2D").sum()   # returns a DataFrame



             A   B
2020-12-25   5   13
2020-12-27   9   17

默認情況下,當隨後調用 sum() 等聚合函數時,會考慮所有列。要僅在某些列上應用該函數,請使用 [] 表示法,如下所示:

df.resample(rule="2D")["A"].sum()   # returns a Series since we only selected 1 column



2020-12-25    5
2020-12-27    9
Freq: 2D, Name: A, dtype: int64

指定關閉

考慮與上麵相同的df

df



             A   B
2020-12-25   2   6
2020-12-26   3   7
2020-12-27   4   8
2020-12-28   5   9

默認為closed="left"(檢查參數說明是否有異常),這意味著:

  • 左側 bin 間隔包含在內

  • 右 bin 間隔是排他的

df.resample(rule="2D", closed="left").sum()



             A   B
2020-12-25   5   13      # Sum of 12-25 and 12-26
2020-12-27   9   17      # Sum of 12-27 and 12-28

另一方麵,傳遞 closed="right" 意味著:

  • 左側 bin 間隔不包括在內

  • 正確的 bin 間隔包含在內

df.resample(rule="2D", closed="right").sum()



             A   B
2020-12-23   2   6      # Sum of 12-24 and 12-25
2020-12-25   7   15     # Sum of 12-26 and 12-27
2020-12-27   5   9      # Sum of 12-28 and 12-29

供您參考,這裏再次是我們的df

df



             A   B
2020-12-25   2   6
2020-12-26   3   7
2020-12-27   4   8
2020-12-28   5   9

指定標簽

默認為label="left"(檢查參數說明是否有異常),表示使用左側區間bin的標簽:

df.resample(rule="2D", label="left").sum()



             A   B
2020-12-25   5   13      # Sum of 12-25 and 12-26
2020-12-27   9   17      # Sum of 12-27 and 12-28

要使用右側間隔箱的標簽,請設置label="right",如下所示:

df.resample(rule="2D", label="right").sum()



             A   B
2020-12-27   5   13      # Sum of 12-25 and 12-26
2020-12-29   9   17      # Sum of 12-27 and 12-28

指定種類

要獲得 DatetimeIndex ,請像這樣設置 kind="timestamp"

df.resample(rule="2D", kind="timestamp").sum().index



DatetimeIndex(['2020-12-25', '2020-12-27'], dtype='datetime64[ns]', freq='2D')

要獲得 PeriodIndex ,請像這樣設置 kind="period"

df.resample(rule="2D", kind="period").sum().index



PeriodIndex(['2020-12-25', '2020-12-27'], dtype='period[2D]', freq='2D')

指定loffset

供您參考,這裏再次是我們的df

df



             A   B
2020-12-25   2   6
2020-12-26   3   7
2020-12-27   4   8
2020-12-28   5   9

要將標簽移動 1 天,請傳遞 loffset="1D",如下所示:

df.resample(rule="2D", loffset="1D").sum()



             A   B
2020-12-26   5   13
2020-12-28   9   17

請注意,隻有標簽發生了偏移 - DataFrame 的結果值不受影響。

作為對比,我們不指定loffset的情況如下:

df.resample(rule="2D").sum()



             A   B
2020-12-25   5   13
2020-12-27   9   17

指定基數

考慮以下 DataFrame :

date_index = pd.date_range("2020/12/25", periods=4)
df = pd.DataFrame({"A":[2,3,4,5],"B":[6,7,8,9]}, index=date_index)
df



             A   B
2020-12-25   2   6
2020-12-26   3   7
2020-12-27   4   8
2020-12-28   5   9

以 4 天產量重新采樣:

df.resample(rule="4D").sum()



             A    B
2020-12-25   14   30

指定base 可確保第一組具有base 行數。例如,base=2 產生:

df.resample(rule="4D", base=2).sum()



             A   B
2020-12-23   5   13
2020-12-27   9   17

在這裏,請注意我們如何從 12-23 而不是 12-25 開始。這是因為 base=2 確保僅 df 的前兩行放置在第一組中。由於我們仍然按連續 4 天進行分組,因此將開始日期更改為 12-23

指定於

默認,resample(~)方法假設 index DataFrame 的值為datetime-like。參數on允許您重新采樣柱子.

考慮以下 DataFrame :

date_index = pd.date_range("2020/12/25", periods=4)
df = pd.DataFrame({"A":date_index,"B":[3,4,5,6]})
df



    A            B
0   2020-12-25   3
1   2020-12-26   4
2   2020-12-27   5
3   2020-12-28   6

要對列 A 重新采樣:

df.resample(rule="2D", on="A").sum()



             B
         A   
2020-12-25   7
2020-12-27   11

請注意以下事項:

  • A 列成為新索引。

  • 分配給這個新索引的名稱是列標簽(在本例中為A)。

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | resample method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。