如何计算数据帧每行多个Python Pandas datetime64 [ns]值的平均值?

时间:2019-11-03 12:41:34

标签: python pandas datetime

MC_schedule_df: 

    Act_Arr_Run-0        Act_Arr_Run-1          Act_Arr_Run-2        Act_Arr_Run-3
0   2005-08-05 05:15:08  2005-08-05 05:12:00    2005-08-05 05:16:50  2005-08-05 05:09:13
1   2005-08-05 06:18:30  2005-08-05 06:14:50    2005-08-05 06:14:29  2005-08-05 06:07:31
2   2005-08-05 06:22:17  2005-08-05 06:18:06    2005-08-05 06:26:25  2005-08-05 06:22:49
3   2005-08-05 08:52:56  2005-08-05 08:58:51    2005-08-05 09:05:27  2005-08-05 08:58:43
4   2005-08-05 13:04:24  2005-08-05 12:58:11    2005-08-05 13:05:41  2005-08-05 13:02:33
5   2005-08-05 13:22:08  2005-08-05 13:14:44    2005-08-05 13:09:08  2005-08-05 13:12:27
6   2005-08-05 14:26:38  2005-08-05 14:13:38    2005-08-05 14:17:31  2005-08-05 14:17:33
7   2005-08-05 18:08:41  2005-08-05 18:17:15    2005-08-05 18:14:21  2005-08-05 18:15:54
8   2005-08-05 19:46:15  2005-08-05 19:45:28    2005-08-05 19:46:20  2005-08-05 19:48:44
9   2005-08-05 23:13:53  2005-08-05 23:06:06    2005-08-05 23:06:25  2005-08-05 23:04:07

你好

我有上面显示的数据帧(MC_schedule_df),由以下数据类型组成:

In[1]: MC_schedule_df.dtypes
Out[1]: 
Act_Arr_Run-0    datetime64[ns]
Act_Arr_Run-1    datetime64[ns]
Act_Arr_Run-2    datetime64[ns]
Act_Arr_Run-3    datetime64[ns]
dtype: object

数据框由日期时间值的行组成,我想计算其中的每行平均值。我尝试了以下代码:

MC_schedule_df = MC_schedule_df.assign(Average=MC_schedule_df.mean(axis=1))

这将导致一列充满NaN值。我试图找出为什么这不起作用,因此阅读了大量文档。我目前的猜测是,Python无法从日期时间值中“分解”适当的信息来计算平均值。

如何计算这些多个Python Pandas datetime64 [ns]值的平均值?任何帮助表示赞赏。

编辑:我尝试了Datetime objects with pandas mean function的方法。但是,此方法不起作用,因为我想计算每行的平均值,因此无法轻松调用该级数。

1 个答案:

答案 0 :(得分:0)

您可以使用this answer中显示的内容。正如链接中指出的那样,您无法计算一堆日期的平均值,因此不支持该操作。但是您可以计算出一堆时间增量的平均值。
使用pandas apply函数进行泛化,并将其应用于DataFrame而不是Series。

mean_values = MC_schedule_df.apply(lambda dt : (dt - dt.min()).mean() + dt.min(), axis=1)

使用示例数据框,mean_values为:

0   2005-08-05 05:13:17.750
1   2005-08-05 06:13:50.000
2   2005-08-05 06:22:24.250
3   2005-08-05 08:58:59.250
4   2005-08-05 13:02:42.250
5   2005-08-05 13:14:36.750
6   2005-08-05 14:18:50.000
7   2005-08-05 18:14:02.750
8   2005-08-05 19:46:41.750
9   2005-08-05 23:07:37.750
dtype: datetime64[ns]