Pandas:如何使用 groupby() 对时间序列重新采样


对时间序列数据进行重新采样意味着聚合新时期的数据。

如果要使用groupby运算符对 pandas 中的时间序列重新采样,可以使用以下基本语法:

 group = df. groupby ([pd. Group (freq=' W '), ' store '])

result = group[' sales ']. sum (). unstack (' store '). fillna (0) 

此特定示例按商店列对 DataFrame 的行进行分组,然后按周对时间序列重新采样 ( freq=’W’ ),然后计算sales列中的值的总和。

请注意,我们可以将时间序列数据重新采样到不同的时间段,包括:

  • S :秒
  • 分钟:分钟
  • H : 小时
  • J :日
  • W : 周
  • : 月
  • :四分之一
  • :年份

以下示例展示了如何在实践中使用groupby操作对时间序列数据进行重采样。

示例:在 Pandas 中使用 groupby 对时间序列重新采样

假设我们有以下 pandas DataFrame,显示两个不同商店每天的总销售额:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' sales ': [13, 14, 17, 17, 16, 22, 28, 10, 17, 10, 11],
                   ' store ': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B']} ,
                   index=pd. date_range ('2023-01-06', '2023-01-16', freq='d'))

#view DataFrame
print (df)

            sales store
2023-01-06 13 A
2023-01-07 14 A
2023-01-08 17 A
2023-01-09 17 A
2023-01-10 16A
2023-01-11 22 B
2023-01-12 28 B
2023-01-13 10 B
2023-01-14 17 B
2023-01-15 10 B
2023-01-16 11 B

假设我们要按store对行进行分组,然后按周对时间序列进行重新采样,然后计算sales列中的值的总和。

我们可以使用以下语法来做到这一点:

 #group by store and resample time series by week
group = df. groupby ([pd. Group (freq=' W '), ' store '])

#calculate sum of sales each week by store
result = group[' sales ']. sum (). unstack (' store '). fillna (0)

#view results
print (result)

store AB
2023-01-08 14.0 0.0
2023-01-15 16.5 17.0
2023-01-22 0.0 11.0

从结果我们可以看出:

  • 截至 01/08/2023 的一周,商店 A 的销售额总和为14
  • 商店 B 截至 01/08/2023 的一周销售额总和为0

等等。

请注意,在本例中我们选择计算sales列中的值的总和。

但是,我们可以选择其他指标,例如计数、平均值、中值、最小值、最大值等。

只需将上面代码中的sum()替换为count()Mean()Median()等。计算您选择的指标。

其他资源

以下教程解释了如何在 Python 中执行其他常见操作:

如何在 Matplotlib 中绘制时间序列
如何在 Seaborn 中绘制时间序列
如何用Python从时间序列计算MAPE

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注