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