python - 熊猫系列获得多个区间的平均值
问题描述
使用不均匀间隔的日期时间系列,如下所示:
date
2019-02-20 13:00:49.268 41.177929
2019-02-20 13:00:50.275 12.431984
2019-02-20 13:00:51.397 18.042411
2019-02-20 13:00:52.434 13.144179
2019-02-20 13:00:53.542 21.349083
...
2019-02-20 13:05:55.059 51.763360
2019-02-20 13:05:56.169 58.140644
2019-02-20 13:05:57.279 0.411533
2019-02-20 13:05:58.408 48.404780
2019-02-20 13:05:59.518 14.626680
Name: Values, Length: 285, dtype: float64
并提供格式如下的日期时间间隔(无重叠)列表:[(start1, end1), (start2, end2), ...]
在组合间隔中获得系列平均值的捷径是什么?(这里可以使用任何插值函数)
我是熊猫初学者,在这里或熊猫文档中没有找到任何东西,对不起,如果这是一个愚蠢的问题......
解决方案
让我们将测试源Series定义为:
2019-02-20 13:00:49.268 40
2019-02-20 13:00:50.275 30
2019-02-20 13:02:51.397 18
2019-02-20 13:02:52.434 13
2019-02-20 13:05:53.542 21
2019-02-20 13:05:55.059 51
2019-02-20 13:06:56.169 32
2019-02-20 13:06:57.279 38
2019-02-20 13:08:58.408 48
2019-02-20 13:08:59.518 14
Name: Val, dtype: int64
间隔列表为:
intv = [(pd.to_datetime('2019-02-20 13:00'), pd.to_datetime('2019-02-20 13:01')),
(pd.to_datetime('2019-02-20 13:06'), pd.to_datetime('2019-02-20 13:07'))]
一个准备步骤是创建一个IntervalIndex:
intvInd = pd.IntervalIndex.from_tuples(intv)
然后你想要的平均值可以计算为:
s[[intvInd.contains(v) for v in s.index.values]].mean()
笔记
我使用Pandas版本0.24.2尝试了上述解决方案。正如Inspi注意到的,至少在0.25版本中,最后一条指令必须更改为:
s[[any(intvInd.contains(v)) for v in s.index.values]].mean()
显然,0.24版在“引擎盖下”的某个地方添加了这个any(...) 。在0.25版中,不会发生这种行为。
推荐阅读
- python - 为什么我的 python HttpServer 在关闭时转储所有收到的请求?
- flutter - 如何在 Flutter 的中心对齐小部件?
- c++ - 如何在 C++ 项目中使用 Swift 静态库 (.a)?
- ruby-on-rails - 在具有多个系列的柱形图中隐藏特定系列图例
- objective-c - 坚持使用 tvOS 和焦点指南
- kdb - 如何将浮点数转换为 KDB 中的整数数据类型?
- php - 从 API 返回的 JSON 中删除项目
- c++ - 如何从另一个 GPU 设备读取数据?
- plotly - Plotly python timedelta64(10:43:23.123456)在散点图上显示不一样
- android - 我的应用程序的测试版需要多长时间才能发布到 android 的生产环境(Play 商店)?