【问题标题】:python time series resample to get correct countpython时间序列重新采样以获得正确的计数
【发布时间】:2019-03-02 13:40:28
【问题描述】:

我有一个 4 年的每月时间序列(索引是时间戳)。因此,理想情况下,我会有 4 月行、4 月行、4 月行、4 月行......等等。

但是,有时,我可能会错过一个月或更长时间。因此,我可能有 1 月 4 日、2 月 2 日、3 月 3 日、4 月 4 日、5 月 1 日……等等

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

例如... jan 的计数是 4,因为我有 2 行带有 Jan 日期。但是,10 月的计数是 3 ......因为我有 3 排婴儿床。 1 月平均售出的苹果是 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

【问题讨论】:

  • 您能否发布一个相关的自包含示例以及哪里出错以帮助调试
  • 转贴。谢谢

标签: python pandas dataframe time-series


【解决方案1】:

您可以在索引值上使用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() 来了解每个月售出的苹果数量,或者诸如此类。

【讨论】:

    【解决方案2】:

    我最终做了这样的事情:

    df.index.month.unique() 中的月份:

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

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

    这似乎有效...即使我的目标是使用重新采样方法...但我找不到重新采样分组键来执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 2019-01-18
      • 2014-12-15
      • 1970-01-01
      • 2021-06-05
      • 2018-06-30
      相关资源
      最近更新 更多