我是堆叠溢出和熊猫的新手,但我很欣赏这个平台,并且有一个有趣的问题:我有一个pandas数据框,它接受NOAA降雨量数据(csv格式表示有降雨的小时数,不同年份但是顺序,一些数据缺失),用零替换NaNs,并为NOAA提供的所有年份的水/管道工程师提供干净的每小时数据文件(完全不同)。但是,工程师想要一个8760(非闰年的小时数)小时数据文件,它是NOAA每年每小时的平均值。
例如,我从1987年7月1日凌晨1点到2001年12月31日凌晨12点,每小时都有NOAA数据;我每小时制作一个巨大的df,但现在我需要每年平均每小时8760小时(平均从1月1日凌晨1点开始,平均从1月1日凌晨2点开始)所有年份,...,平均从12月31日上午12:00开始的所有年份)记住数据的开始和闰年!有任何见解如何成功地做到这一点?
答案 0 :(得分:0)
熊猫非常适合这类事情。你需要做的是:
groupby
方法创建分组行的映射这是一个创建虚拟数据集&计算每组的平均值:
import pandas as pd
import numpy as np
#creating some dummy data
n_years = 3
n_hours = 3
st_times = ['01-01-198{0} 00:00'.format(i) for i in range(n_years)]
nd_times = ['01-01-198{0} 0{1}:00'.format(i,n_hours-1) for i in range(n_years)]
indx_list = []
for s, e in zip(st_times, nd_times):
indx = pd.date_range(start=s, end=e, freq='H')
indx_list.append(indx.values)
index = pd.DatetimeIndex(np.concatenate(indx_list,axis=0))
data = pd.DataFrame({'rainfall': list(range(n_years*n_hours)),
'rainfall_1': list(reversed(range(n_years*n_hours)))
}, index=index)
#creating the hour, day, month, & day columns
data.loc[:,'hour'] = data.index.hour.values
data.loc[:,'day'] = data.index.day.values
data.loc[:,'month'] = data.index.month.values
#create groups and calculate the mean of each group
data.groupby(['month','day','hour']).mean()