python - 如何找到数据框的哪些值与特定平均值“显着”不同
问题描述
我正在创建一个 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())
对此代码或任何替代方法的任何帮助将不胜感激。
解决方案
我认为您可以使用 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)
推荐阅读
- c# - 在查询中隐式包含所有相关数据
- python - 通过比较列,用另一个数据框的列中的值填充 NaN
- python - 根据 PEP-8,如何正确编写函数签名?
- if-statement - 如果不满足条件,则分配相同的值
- c++ - 地图是什么意思
米= {}; 在 C++ 中? - angularjs - 量角器 - 如何引用具有没有值的属性的 web 元素?
- c# - 为什么即使没有错误,我的 Bool 值也会在 catch 块中发生变化?
- javascript - 如何通过改变键为嵌套对象赋值?
- python - USQL + Python 扩展库
- javascript - 创建简单计算器时的 IIFE 问题