【问题标题】:Another way to use downsampling in pandas在 pandas 中使用下采样的另一种方法
【发布时间】:2016-07-06 23:49:25
【问题描述】:

让我们看一些一分钟的数据:

In [513]: rng = pd.date_range('1/1/2000', periods=12, freq='T')
In [514]: ts = Series(np.arange(12), index=rng)
In [515]: ts
Out[515]:
2000-01-01 00:00:00      0
2000-01-01 00:01:00      1
2000-01-01 00:02:00      2
2000-01-01 00:03:00      3
2000-01-01 00:04:00      4
2000-01-01 00:05:00      5
2000-01-01 00:06:00      6
2000-01-01 00:07:00      7
2000-01-01 00:08:00      8
2000-01-01 00:09:00      9
2000-01-01 00:10:00      10
2000-01-01 00:11:00      11
Freq: T

假设您想通过以下方式将这些数据聚合成五分钟的块或条 每组的总和:

In [516]: ts.resample('5min', how='sum')
Out[516]:
2000-01-01 00:00:00 0
2000-01-01 00:05:00 15
2000-01-01 00:10:00 40
2000-01-01 00:15:00 11
Freq: 5T

但是我不想使用resample 方法并且仍然想要相同的输入输出。如何使用group_byreindex 或任何其他此类方法?

【问题讨论】:

  • resample 有什么你不喜欢的特殊功能吗?或者这是一个类似家庭作业的问题?
  • 您可以将时间分组器与 groupby 一起使用
  • 你可能会认为这是一个类似家庭作业的问题。
  • @JohnE 你能详细说明我如何使用它吗?

标签: python python-2.7 python-3.x pandas


【解决方案1】:

您可以通过这种方式使用自定义pd.Grouper

 In [78]: ts.groupby(pd.Grouper(freq='5min', closed='right')).sum()
Out [78]:
1999-12-31 23:55:00     0
2000-01-01 00:00:00    15
2000-01-01 00:05:00    40
2000-01-01 00:10:00    11
Freq: 5T, dtype: int64

closed='right' 确保输出完全相同。


但是,如果您的目标是进行更多自定义分组,您可以将.groupby 与您自己的向量一起使用:

 In [78]: buckets = (ts.index - ts.index[0]) / pd.Timedelta('5min')
 In [79]: grp = ts.groupby(np.ceil(buckets.values))

 In [80]: grp.sum()
Out[80]:
0     0
1    15
2    40
3    11
dtype: int64

输出不完全相同,但方法更灵活(例如可以创建不均匀的桶)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 2019-05-25
    • 2015-12-27
    • 2013-03-27
    • 2011-02-21
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多