我有这样的df
它在不同日期的小时分钟中包含speed
和dir
。例如,第一行在20060101 7:11记录了dir=87, speed=5
。
现在,我认为数据可能太精确了,我想将每小时的平均值用于以后的计算。我该怎么做?
我可以通过groupy
df['Hr']=df['HrMn'].apply(lambda x: str(x)[:-2])
df.groupby(['date', 'Hr'])['speed'].mean()
这将返回我想要的
但这不是一个数据框,如何用于以后的计算?具体来说,我想知道
如果我使用的
groupby
方法是解决此问题的正确方法?如果是这样,以后如何将其用作数据框? (我还需要获取dir
,dir_max
和其他属性)结果
groupby
返回的顺序不正确(在date
和Hr
中),是否仍然需要重新排序?更新:
如果我执行
df.groupby(['date', 'Hr'])['speed'].mean().unstack()
,它将返回数据当然是正确的,但是我仍然希望它遵循初始数据框形式
除了
HrMn
-> Hr
最佳答案
您得到的是一个多索引数据框。你可以试试
df.groupby(['date', 'Hr'])['speed'].mean().reset_index()
如果您想获取其余数据的平均值,请尝试
df.groupby(['date', 'Hr'])['speed', 'dir_max', 'speed_max'].mean().reset_index()
编辑:
将平均值应用于速度列,并将最大值应用于dir_max和speed_max
df.groupby(['date', 'Hr']).agg({'speed' : np.mean,'dir_max' : np.max, 'speed_max': np.max}).reset_index()