如何平均记录结束时间的特定时间段内的数据
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))
我需要这方面的帮助。 我想使用特定时间步长(例如 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))