如何平均记录结束时间的特定时间段内的数据

How to average of data over specific time period recoding the ending time

我需要这方面的帮助。 我想使用特定时间步长(例如 3 秒间隔)获取一段时间内数据的平均值。因此,数据的分辨率为一秒,我想使用平均值将分辨率更改为 3 秒。

输入:

time S
2:30:01 5
2:30:02 9
2:30:03 450
2:30:04 7
2:30:05 10
2:30:06 300

这就是我的想法...唉,这并没有改变时间间隔,而且平均值不在正确的索引处。

import pandas

step = 3  #3 seconds
df = df.groupby(df.index // step).mean()

注意:如果您认为有另一种方法可以解决这个问题,我会洗耳恭听。

输出:

time S
2:30:03 154.7
2:30:06 105.7

TL;DR

import pandas as pd

from datetime import datetime, timedelta


x = [ ['2:30:01', '5'],
 ['2:30:02', '9'],
 ['2:30:03', '450'],
 ['2:30:04', '7'],
 ['2:30:05', '10'],
 ['2:30:06', '300']]


df = pd.DataFrame(x, columns=(['time', 's']))
df['time'] = df['time'].apply(lambda t: datetime.strptime(t, '%H:%M:%S'))
df['s'] = df['s'].astype(int)

df_new = pd.DataFrame([{'start_time':interval_start.strftime("%H:%M:%S"), 
                        'end_time': (interval_start+timedelta(0,2)).strftime("%H:%M:%S"),
                        's': sum(rows['s'])/len(rows['s'])} 
                        for interval_start, rows in 
                        df.set_index('time').resample('3s',offset="1s")])

[输出]:

    start_time  end_time    s
0   02:30:01    02:30:03    154.666667
1   02:30:04    02:30:06    105.666667

中龙

首先,如果您将字符串时间类型转换为日期时间对象(或者如果您是神秘博士 =),那么操作时间会更容易:

df['time'] = df['time'].apply(lambda t: datetime.strptime(t, '%H:%M:%S'))

繁重的工作由以下人员完成:

df.set_index('time').resample('3s',offset="1s")]

DataFrame.resample(...) 就像一个组,您使用 '3s' 按 3 秒分组并且偏移量为 1s,因此将所有数据点分组在 3 秒内区间.

这会将日期时间对象转换为时间戳的原始字符串格式:

interval_start.strftime("%H:%M:%S")

并获取区间的结束时间:

interval_start+timedelta(0,2))