首页 > 解决方案 > 如何找到数据框的哪些值与特定平均值“显着”不同

问题描述

我正在创建一个 Pandas DataFrame,其中一列是一年中每隔半小时的温度。

我想创建一个列,该列的每一行都包含当时该月的平均值。

例如,在包含值的行中:“13:00:00 2018-02-02”,我希望该值是 2 月下午 1 点获取的温度读数的平均值。我这样做是为了确定哪些特定时间的温度读数异常。

我试图通过使用 .loc 和 for 循环来做到这一点。

这是我的代码,我运行它并收到一条错误消息。

import numpy as np
import datetime as dat

#df_train has been defined and is a Pandas DataFrame

df_train['Time']=df_train['Date and Time'].dt.time
df_train['Month']=df_train['Date and Time'].dt.month
times=np.array(df_train.loc[df_train['Date']==dat.date(2018, 1, 2)].Time)
means=[]
for i in range(1,13):
    df_hour=df_train.loc[df_train['Month']==int(i)]
    for time in times:

        df_hour=df_hour.loc[df_hour['Time']==time]
        means.append(df_hour['Temp'].values.mean())

我希望我可以为我的数据框添加手段。

错误读取:

C:\Users\ocallaghan_m\Desktop\Forecasting\Python_Code\Neural Networks\Non 
Recursive NN\48 steps type\Next Day With Day Type and BH & 
Weather\data.py:74: RuntimeWarning: Mean of empty slice.
  means.append(df_hour['Temp'].values.mean())

对此代码或任何替代方法的任何帮助将不胜感激。

标签: pythonpandas

解决方案


我认为您可以使用 pandas 的groupby()方法来实现您想要的(而不是 for 循环)。

这是代码:

means = df_train.groupby(['Month', 'Time']).Temp.mean()
df_train.set_index(['Month', 'Time'], inplace=True)
df_train['Mean'] = means
df_train.reset_index(inplace=True)

推荐阅读