当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。