如何获取由开始和结束日期时间数组定义的熊猫数据帧范围的平均值?



我需要评估熊猫数据帧data变量的几个平均值。应计算平均值的时间跨度由两个数组定义setpoint_start.indexsetpoint_end.index

例如,数据帧可能如下所示:

ID                         MF_SCR_urea_qtty_stpt_1
2019-04-06 18:00:00.276    0.006497
2019-04-06 18:00:01.368    0.006497
2019-04-06 18:00:02.460    0.006497
2019-04-06 18:00:03.568    0.006497
2019-04-06 18:00:04.644    0.006497
2019-04-06 18:00:05.736    0.006497
2019-04-06 18:00:06.844    0.006497
2019-04-06 18:00:07.920    0.006497
2019-04-06 18:00:09.012    0.006497
2019-04-06 18:00:10.104    0.006497
2019-04-06 18:00:11.196    0.006497
2019-04-06 18:00:12.288    0.006497
2019-04-06 18:00:13.380    0.006497
2019-04-06 18:00:14.471    0.006497
2019-04-06 18:00:15.579    0.006497
2019-04-06 18:00:16.655    0.006497
2019-04-06 18:00:17.747    0.006497
2019-04-06 18:00:18.839    0.006497
2019-04-06 18:00:19.931    0.006497
2019-04-06 18:00:21.023    0.006497
2019-04-06 18:00:22.115    0.006497
2019-04-06 18:00:23.207    0.006497
2019-04-06 18:00:24.299    0.006497
2019-04-06 18:00:25.377    0.006497
2019-04-06 18:00:26.483    0.006497
2019-04-06 18:00:27.592    0.006497
2019-04-06 18:00:28.667    0.006497
2019-04-06 18:00:29.759    0.006497
2019-04-06 18:00:30.851    0.006497
2019-04-06 18:00:31.944    0.006497

现在我有两组日期时间输入,它们定义了我想计算平均值的跨度:

第一个定义了相关范围的所有起点:

setpoint_start.index

DatetimeIndex(['2019-04-06 18:00:05.736', '2019-04-06 18:00:13.380',
'2019-04-06 18:00:25.377'],
dtype='datetime64[ns]', freq=None)

第二个定义所有端点

setpoint_end.index

DatetimeIndex(['2019-04-06 18:00:09.012', '2019-04-06 18:00:16.655',
'2019-04-06 18:00:30.851'],
dtype='datetime64[ns]', freq=None)

我试图通过以下方式计算平均值:

mean_feedback = np.mean(data["MF_SCR_urea_qtty_act_{}".format(i)][setpoint_start.index:setpoint_end.index])

但是,这会产生如下所示的错误:

Cannot convert input [DatetimeIndex(['2019-04-06 18:00:05.736', '2019-04-06 18:00:13.380',
'2019-04-06 18:00:25.377'],
dtype='datetime64[ns]', freq=None)] of type <class 'pandas.core.indexes.datetimes.DatetimeIndex'> to Timestamp

如何解决此错误?

如果需要对日期时间跨度的每个对进行mean,请使用带有列表理解和meanzip

i = 1
zipped = zip(setpoint_start.index, setpoint_end.index)
mean_feedback = [data.loc[s:e, "MF_SCR_urea_qtty_stpt_{}".format(i)].mean() for s, e in zipped]
print (mean_feedback)
[0.006497, 0.006497, 0.006497]

如果需要总平均值,则需要扁平化一个大列表的值,然后调用mean- 输出是标量:

mean_feedback = np.mean([x for s, e in zipped 
for x in data.loc[s:e, "MF_SCR_urea_qtty_stpt_{}".format(i)]])
print (mean_feedback)
0.006497000000000001

最新更新