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分钟。