我有一个4年的每月时间序列(索引是时间戳)。因此,理想情况下,我将有4个1月行,2月2月行,3月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日...等等。然后取平均值?
例如... jan的计数为4,因为我有2行的Jan日期。但是,十月的计数是3 ...因为我有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
答案 0 :(得分:0)
您可以在索引值上使用extract
和正则表达式来提取月份。
以下是我用作示例的DataFrame:
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()
来了解每月售出的苹果数量,或者没有。
答案 1 :(得分:0)
我最终做了这样的事情:
df.index.month.unique()中的月份:
df_month_avg = df[df.index.month == month].mean(axis=0, numeric_only=True)
对于count,我只是用count()代替了mean()
这似乎可行……即使我的目标是使用重采样方法……但我找不到重采样分组键来执行此操作。