Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建滚动总和&;数据帧中不同变量的平均值_Python_Pandas_Numpy_Dataframe_Pandas Groupby - Fatal编程技术网

Python 创建滚动总和&;数据帧中不同变量的平均值

Python 创建滚动总和&;数据帧中不同变量的平均值,python,pandas,numpy,dataframe,pandas-groupby,Python,Pandas,Numpy,Dataframe,Pandas Groupby,我有一个包含大量环境数据的数据框,看起来像这样 import pandas as pd import numpy as np df = pd.DataFrame({'temperature' : np.random.uniform(5,15, 500), 'Precipitation' : np.random.uniform(0, 3, 500)}, index=pd.date_range('1/1/2020', periods=500, freq='H')) df['TempUnit'] =

我有一个包含大量环境数据的数据框,看起来像这样

import pandas as pd
import numpy as np

df = pd.DataFrame({'temperature' : np.random.uniform(5,15, 500), 'Precipitation' : np.random.uniform(0, 3, 500)}, index=pd.date_range('1/1/2020', periods=500, freq='H'))
df['TempUnit'] = 'celsius'
df['PrecipUnit'] = 'mm'

我想根据这些数据创建新的列,计算6小时平均温度和6小时降水量。我使用以下方法:

df['rolling_sum_by_time'] = df.groupby(df.index.time)['Precipitation'].apply(lambda x: x.rolling('6h').sum())
这不是对数据求和-它给出了下面的输出,我不确定我在这里哪里出错了。

我还尝试使用
groupby
创建一个新的数据帧,如下所示:

temp_6h = df.groupby('temperature').rolling('6H').mean()
这会把日期搞砸,让它们乱序(不是我想要的):

理想情况下,我要寻找的是一个如下所示的数据帧,其中每六个小时对前六个小时的值进行求和(降水量)和平均(温度)。理想情况下,我希望它以指定的6小时间隔工作,即0600、1200、1800和2400小时


我非常感谢你的帮助!谢谢。

你可以这样做

df['temp_avg'] = df.temperature.resample('6h',label = 'right', closed = 'right').mean()
df['precip_sum'] = df.Precipitation.resample('6h', label ='right', closed='right').sum()
试试这个:

mport pandas as pd
import numpy as np

df = pd.DataFrame({'temperature' : np.random.uniform(5,15, 500), 'Precipitation' : np.random.uniform(0, 3, 500)}, index=pd.date_range('1/1/2020', periods=500, freq='H'))
df['TempUnit'] = 'celsius'
df['PrecipUnit'] = 'mm'

rolling_sum_by_time = []
for x in range(0,len(df["Precipitation"])):
    P = [df["Precipitation"][x-2+i] for i in range(6) if x-2+i >= 0 and x-2+i < len(df["Precipitation"])]
    rolling_sum_by_time.append(sum(P))
df['rolling_sum_by_time'] = rolling_sum_by_time

rolling_sum_by_time = []
for x in range(0,len(df["Precipitation"])):
    P = [df["Precipitation"][x-2+i] for i in range(6) if x-2+i >= 0 and x-2+i < len(df["Precipitation"])]
    rolling_sum_by_time.append(sum(P)/len(P))
df['rolling_sum_by_time'] = rolling_sum_by_time

temp_6h = []
for x in range(0,len(df["temperature"])):
    P = [df["temperature"][x-2+i] for i in range(6) if x-2+i >= 0 and x-2+i < len(df["temperature"])]
    temp_6h.append(sum(P))
df['temp_6h'] = temp_6h

mport熊猫作为pd
将numpy作为np导入
df=pd.DataFrame({'temperature':np.random.uniform(5,15500),'deposition':np.random.uniform(0,3500)},index=pd.date\u range('1/1/2020',periods=500,freq='H'))
df['TempUnit']='celsius'
df['PrecipUnit']='mm'
按时间滚动求和=[]
对于范围(0,len)内的x(df[“沉淀]):
如果x-2+i>=0且x-2+i=0且x-2+i=0且x-2+i
你在
时间
上分组,但是滚动
6小时
,这对我来说没有什么意义。你想用6H重新采样。@QuangHoang我在使用groupby.index时得到了相同的结果-我将进一步研究。这对你有用吗?这对我来说并没有求precip值的和-抱歉。谢谢-但这给了我一个滚动求和的列,它的降水量值较低,它似乎根本没有求和,它也求和了温度数据。是的,在角落里,它只求和3或4。谢谢你的帮助-另一个答案做得更简洁!我得到一个错误:MergeError:Must pass right_on或right_index=trueThank-这提供了一个包含84行的数据帧,用于6小时间隔的温度数据,但它删除了我的原始数据(500行)。我想通过这样做,
df['temp_avg']=df.temperature.resample('6h').mean()
我可以在一个新列中创建它,保留以前的数据。让我们来看看。这是可行的,但有一个问题-每个6小时时间戳的值不正确-2020-01-01 06:00:00的值应该是之前6个值的总和/平均值(从01:00:00到06:00:00。使用您的方法,它实际上是06:00:00到11:00:00之间值的平均值。每6小时的值应该是前6个值的平均值/总和,而不是以下值。Manishankar-是-这解决了所有问题-谢谢!稍微清理一下
df['temp_avg']=df.temperature.resample('6h',label='right',closed='right').mean()
df['precip_sum']=df.deposition.resample('6h',label='right',closed='right')。sum()只需少几个字符