我无法得到一个值随时间变化的平均值。你知道吗
我有一个特定时间的传感器读数列表,我想得到传感器值的每小时平均值。你知道吗
from datetime import datetime, timedelta
import numpy
import pandas
key_id = 1234
key_label = "Sensor1"
t_0 = datetime(2010,1,2,12)
data = [
[t_0 - timedelta(seconds=120), key_id, 0],
[t_0 + timedelta(seconds=1800), key_id, 1],
[t_0 + timedelta(seconds=3600 + 300), key_id, 121],
[t_0 + timedelta(seconds=3600 + 360), key_id, 1],
[t_0 + timedelta(seconds=7200 + 1800), key_id, 2],
]
df = pandas.DataFrame(list(map(lambda r: list(r), data)), columns=["TS", "KeyId", "Value"])
df_pivot = (df
.pivot(index="TS", columns="KeyId", values="Value")
.ffill()
.rename({key_id: key_label}, axis='columns')
)
def mymean(*args, **kwargs):
expected_results = [numpy.NaN, 0.5, 3, 1.5]
d0 = args[0].index[0]
if d0 == data[0][0]:
return expected_results[0]
if d0 == data[1][0]:
return expected_results[1]
if d0 == data[2][0]:
return expected_results[2]
if d0 == data[4][0]:
return expected_results[3]
return "???"
results = (df_pivot
.resample('1H')
.agg(["min", "max", "mean", "count", mymean])
)
display(df_pivot)
display(results)
预期结果在mymean
列中。在13:00和14:00之间有两个值。这两个值的平均值是61,但传感器仅在121处停留一分钟,因此预期的平均值应该是3(对于懒惰的读卡器:(1*59+121*1)/60)。你知道吗
KeyId Sensor1
TS
2010-01-02 11:58:00 0
2010-01-02 12:30:00 1
2010-01-02 13:05:00 121
2010-01-02 13:06:00 1
2010-01-02 14:30:00 2
Sensor1
min max mean count mymean
TS
2010-01-02 11:00:00 0 0 0 1 NaN
2010-01-02 12:00:00 1 1 1 1 0.5
2010-01-02 13:00:00 1 121 61 2 3.0
2010-01-02 14:00:00 2 2 2 1 1.5
我可以向上采样到采样频率,ffill
和平均值,但这看起来效率很低。你知道吗
我是这样做的:
ffill
给它们赋值:span
:value
乘以span
:相关问题 更多 >
编程相关推荐