我有这样的df

python -  Pandas :在某些行上取平均值并作为数据框返回-LMLPHP

它在不同日期的小时分钟中包含speeddir。例如,第一行在20060101 7:11记录了dir=87, speed=5

现在,我认为数据可能太精确了,我想将每小时的平均值用于以后的计算。我该怎么做?



我可以通过groupy

df['Hr']=df['HrMn'].apply(lambda x: str(x)[:-2])
df.groupby(['date', 'Hr'])['speed'].mean()


这将返回我想要的

python -  Pandas :在某些行上取平均值并作为数据框返回-LMLPHP

但这不是一个数据框,如何用于以后的计算?具体来说,我想知道


如果我使用的groupby方法是解决此问题的正确方法?如果是这样,以后如何将其用作数据框? (我还需要获取dirdir_max和其他属性)
结果groupby返回的顺序不正确(在dateHr中),是否仍然需要重新排序?




更新:

如果我执行df.groupby(['date', 'Hr'])['speed'].mean().unstack(),它将返回

python -  Pandas :在某些行上取平均值并作为数据框返回-LMLPHP

数据当然是正确的,但是我仍然希望它遵循初始数据框形式

python -  Pandas :在某些行上取平均值并作为数据框返回-LMLPHP

除了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()

10-06 13:54
查看更多