Python时间序列重采样以获取正确的计数

2024-05-17 13:25:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个4年每月的时间序列(索引是时间戳)。因此,理想情况下,我会有4个一月行,4个二月行,4个三月行,4个四月行。。。。等等。你知道吗

然而,有时,我可能会错过一个月或更多。因此,我可能有1月4日,2月2日,3月3日,4月4日,5月1日。。。等等

我正在尝试重新采样('MS').count(),但这不起作用,因为它将每个月计为一个月。如何分组以获得正确的计数,例如:1月4日、2月2日、3月3日、4月4日、5月1日。。。等等。然后取平均值?你知道吗

例如。。。1月的计数是4,因为我有2行1月的日期。然而,十月的计数是3。。。因为我有三排婴儿床。一月份苹果的平均销售量是13/4

我试着用重采样,而不是循环或切片,如果可能的话。你知道吗

df_= df_monthly.resample('MS').count()

Index       Apples_sold
1-1,2015  3
2-1,2015  5
3-1,2015  6
...
9-1,2015  7
10-1,2015  9
11-1,2015  6
12-1,2015  2
==================
1-1,2016  2
2-1,2016  5
3-1,2016  6
...
9-1,2016  7
10-1,2016  9
11-1,2016  6
12-1,2016  2
==================
1-1,2017  4
2-1,2017  5
3-1,2017  6
...
9-1,2017  7
10-1,2017  9
11-1,2017  6
12-1,2017  2
==================
1-1,2018  4
2-1,2018  5
3-1,2018  6
...
9-1,2018  7

Tags: 苹果dfcount时间情况切片序列ms
2条回答

最后我做了这样的事情:

for month in df.index.month.unique():

   df_month_avg = df[df.index.month == month].mean(axis=0, numeric_only=True)

对于count,我只是将mean()替换为count()

这似乎奏效了。。。尽管我的目标是使用重采样方法。。。但我找不到重采样分组键来执行此操作。你知道吗

您可以在索引值上使用^{}和正则表达式来提取月份。你知道吗

以下是我用作示例的数据帧:

             count
1 Feb 2018       1
8 Feb 2018       2
1 Mar 2018       3
8 Mar 2018       4
15 Mar 2018      5
1 Apr 2018       6
8 Apr 2018       7
15 Apr 2018      8
22 Apr 2018      9

以及要提取的代码:

month_re = r'(?P<month>[A-Za-z]+)'
months = df.groupby(df.index.str.extract(month_re, expand=False), axis=0)
for month, group in months:
    print(month, group.count())

输出:

Apr count    4
Feb count    2
Mar count    3

你也可以用sum()来找出每个月苹果的销量,或者其他什么。你知道吗

相关问题 更多 >