如何将pandas timeseries df重采样到表示某个度量的相等总和的新行中?

2024-04-26 18:51:14 发布

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

是否可以通过某列累积和的“BIN”对timeseries数据重新采样?我的意思是如果我的原始df是:

+------+------------+-------+----------------+
| time | value      | bool  | someothervalue |
+------+------------+-------+----------------+
| 00:01| 3          | True  | 5              |
| 00:03| 1          | True  | 3              |
| 00:04| 2          | False | 6              |
| 00:20| 2          | True  | 7              |
| 00:27| 4          | True  | 4              |
| 00:28| 1          | False | 6              |
| 00:29| 1          | True  | 7              |
| 00:30| 2          | True  | 3              |
+------+------------+-------+----------------+

我想“按值”对其重新采样,以便每个重新采样的行表示4的聚合值:

+-------+-------+-----+---------+--------------+-------------+
| start | end   | valuesum | truecount | somevaluesum | sampledrows |
+-------+-------+----------+-----------+--------------+-------------+
| 00:01 | 00:03 | 4        | 2         | 8            | 2           |
| 00:04 | 00:20 | 4        | 1         | 13           | 2           |
| 00:27 | 00:27 | 4        | 1         | 4            | 1           |
| 00:28 | 00:30 | 4        | 2         | 16           | 3           |
+-------+-------+----------+-----------+--------------+-------------+

我目前的解决方案是“传统的”df.itertuples(),但速度非常慢,我的目标数据集是1亿行,我必须对它进行多次不同的重新采样。我正在寻找类似于df.resample.ohlc()的有效解决方案,但基于“值”间隔而不是时间间隔

编辑:我的示例过于简单,我的实际数据是浮点型的,所以计算模比较困难,我还需要重采样数据中的第一个(打开)和最后一个(关闭)值。我保证以后不会过分简化我的问题,这是我的第一个问题


1条回答
网友
1楼 · 发布于 2024-04-26 18:51:14

让我们尝试获取mod,然后cumsum创建密钥,我们可以执行groupby+agg

s=df.groupby(((df.value.cumsum()%4)==0).iloc[::-1].cumsum()).agg(st=('time','min'),
                                         end=('time','max'),
                                         truecount=('bool','sum'),
                                         somevaluesum=('someothervalue','sum'),
                                         sampledrows=('someothervalue','count')) 
          st    end  truecount  somevaluesum  sampledrows
value                                                    
1      00:28  00:30        2.0            16            3
2      00:27  00:27        1.0             4            1
3      00:04  00:20        1.0            13            2
4      00:01  00:03        2.0             8            2

相关问题 更多 >