Pandas 每一行交错的平均时间

Pandas 每一行交错的平均时间

问题描述

这可能是一个愚蠢的问题,可能已经有答案了,但我在寻找我需要的答案时遇到了困难。我想对一个包含1秒时间间隔的大数据集进行平均,切换为每10分钟平均一次,然后每20分钟平均一次,然后连续回到10分钟。我可以使用pandas的’resample’函数将整个数据集转换为只包含10分钟或者20分钟的平均值,但我不知道如何在两者之间交替进行。

这是我的数据样本:

df= pd.DataFrame({'time': time, 'velocity': vel})

                     time           velocity
0     2023-08-29 00:00:10           0.133775
1     2023-08-29 00:00:11           0.152900
2     2023-08-29 00:00:12           0.114675
3     2023-08-29 00:00:13          -0.019125
4     2023-08-29 00:00:14          -0.076450
                  ...                ...
75537 2023-08-29 23:59:55          -0.057325
75538 2023-08-29 23:59:56          -0.095550
75539 2023-08-29 23:59:57          -0.038225
75540 2023-08-29 23:59:58          -0.038225
75541 2023-08-29 23:59:59          -0.057325

我想实现这个功能,平均每10分钟取一次值,先取20个,然后10个,再取20个,如此循环下去,最好使用 df.resample 方法:

                     time           velocity
0     2023-08-29 00:00:00           0.003069
1     2023-08-29 00:00:10           0.000212
2     2023-08-29 00:00:30          -0.013170
3     2023-08-29 00:00:40          -0.015599
4     2023-08-29 00:01:00           0.010070

任何形式的帮助都会被赞赏,如果这个问题是重复的,请将我指向那个问题,因为我找不到所需的示例。谢谢!

解决方案

示例

我们需要可重现的示例来解决你的问题。我将制作一个稍微不同的示例来实现可重现性,请尝试理解其中的逻辑。

import pandas as pd
import numpy as np
time = pd.date_range('2023-01-01', periods=30, freq='15s')
df = pd.DataFrame({'time':time, 'velocity':np.random.randint(0, 10, 30)})

df.head(5)

    time                velocity
0   2023-01-01 00:00:00 7
1   2023-01-01 00:00:15 9
2   2023-01-01 00:00:30 8
3   2023-01-01 00:00:45 9
4   2023-01-01 00:01:00 0

代码

我将尝试计算1分钟和2分钟的平均值。首先,让我们将其重新采样为1分钟。

tmp = df.resample('T', on='time')['velocity'].mean().reset_index()

tmp

    time                velocity
0   2023-01-01 00:00:00 8.25
1   2023-01-01 00:01:00 3.00
2   2023-01-01 00:02:00 1.75
3   2023-01-01 00:03:00 4.00
4   2023-01-01 00:04:00 5.25
5   2023-01-01 00:05:00 3.75
6   2023-01-01 00:06:00 6.00
7   2023-01-01 00:07:00 5.00

制造 tmp -> 1分钟 & 2分钟

grp = (tmp.index % 3).isin([0, 1]).cumsum()
out = tmp.groupby(grp).agg({'time':'first', 'velocity':'mean'})

输出:

    time                velocity
1   2023-01-01 00:00:00 8.250
2   2023-01-01 00:01:00 2.375
3   2023-01-01 00:03:00 4.000
4   2023-01-01 00:04:00 4.500
5   2023-01-01 00:06:00 6.000
6   2023-01-01 00:07:00 5.000

重写这段代码,为10分钟和20分钟。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程