TimeSeriesDataFrame.convert_frequency

TimeSeriesDataFrame.convert_frequency(freq: str | DateOffset, agg_numeric: str = 'mean', agg_categorical: str = 'first', num_cpus: int = -1, chunk_size: int = 100, **kwargs) TimeSeriesDataFrame[源]

将数据帧中的每个时间序列转换为给定频率。

此方法有两个用途:

  1. 将非规则采样的时间序列转换为规则时间索引。

  2. 通过下采样聚合时间序列数据(例如,将每日销售额转换为每周销售额)

标准的 df.groupby(...).resample(...) 对于大型数据集可能非常慢,因此我们将此操作并行化到多个 CPU 内核上。

参数:
  • freq (Union[str, pd.DateOffset]) – 数据应转换到的频率。支持的值请参见 pandas frequency aliases

  • agg_numeric ({"max", "min", "sum", "mean", "median", "first", "last"}, default = "mean") – 应用于数值列的聚合方法。

  • agg_categorical ({"first", "last"}, default = "first") – 应用于类别列的聚合方法。

  • num_cpus (int, default = -1) – 并行重采样时使用的 CPU 内核数。设置为 -1 以使用所有内核。

  • chunk_size (int, default = 100) – 分配给每个并行工作线程的时间序列块大小。

  • **kwargs – 将传递给 pandas.DataFrameGroupBy.resample 的其他关键字参数。

返回:

ts_df – 一个新的时间序列数据帧,其中时间序列已按新频率重新采样。如果原始数据在给定周期内没有信息,输出可能包含用 NaN 表示的缺失值。

返回类型:

TimeSeriesDataFrame

示例

将非规则采样的时间序列数据转换为规则索引

>>> ts_df
                    target
item_id timestamp
0       2019-01-01     NaN
        2019-01-03     1.0
        2019-01-06     2.0
        2019-01-07     NaN
1       2019-02-04     3.0
        2019-02-07     4.0
>>> ts_df.convert_frequency(freq="D")
                    target
item_id timestamp
0       2019-01-01     NaN
        2019-01-02     NaN
        2019-01-03     1.0
        2019-01-04     NaN
        2019-01-05     NaN
        2019-01-06     2.0
        2019-01-07     NaN
1       2019-02-04     3.0
        2019-02-05     NaN
        2019-02-06     NaN
        2019-02-07     4.0

将季度数据下采样到年度频率

>>> ts_df
                    target
item_id timestamp
0       2020-03-31     1.0
        2020-06-30     2.0
        2020-09-30     3.0
        2020-12-31     4.0
        2021-03-31     5.0
        2021-06-30     6.0
        2021-09-30     7.0
        2021-12-31     8.0
>>> ts_df.convert_frequency("YE")
                    target
item_id timestamp
0       2020-12-31     2.5
        2021-12-31     6.5
>>> ts_df.convert_frequency("YE", agg_numeric="sum")
                    target
item_id timestamp
0       2020-12-31    10.0
        2021-12-31    26.0