我需要评估熊猫数据帧data
变量的几个平均值。应计算平均值的时间跨度由两个数组定义setpoint_start.index
和setpoint_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
,请使用带有列表理解和mean
的zip
:
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