熊猫:获得某些行的平均值并作为数据帧返回

时间:2017-03-08 01:46:25

标签: python pandas

我有这样的df

enter image description here

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

现在,我认为数据可能过于精确,我希望每小时使用平均值进行后续计算。我该怎么办?

我可以通过groupy

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

会返回我想要的东西

enter image description here

但它不是数据帧,我怎样才能用于以后的计算?具体来说,我想知道

  1. 如果我使用的groupby方法是解决此问题的正确方法吗?如果是这样,以后如何将其用作数据帧? (我还需要获得dirdir_max和其他属性

  2. 结果groupby返回的顺序不合适(在dateHr中),无论如何要重新排序吗?

  3. 更新

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

    enter image description here

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

    enter image description here

    除了HrMn - > Hr

1 个答案:

答案 0 :(得分:1)

您获得的是一个多索引数据框。你可以尝试

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