代码之家  ›  专栏  ›  技术社区  ›  ScalaBoy

如何获取平均每小时的条目数?

  •  1
  • ScalaBoy  · 技术社区  · 6 年前

    我有以下数据框 df 我想计算每天按跑道分组的平均时数

    year   month   day   hour    runway
    2017   12      30    10      32L
    2017   12      30    11      32L
    2017   12      30    11      32L
    2017   12      30    11      32L
    2017   12      30    11      30R
    2018   12      31    10      32L
    2018   12      31    10      32L
    2018   12      31    11      32L
    2018   12      31    11      32L
    

    预期结果如下:

    hour   avg. count per hour
    10     1.5    
    11     3
    

    如果我分组 hour size ,我得到每小时的条目总数。但是我如何才能得到每小时的平均条目数呢?

    df.groupby("hour").size()
    

    我尝试过类似的方法,但失败了,错误是:

    s = df.groupby(["hour"])["month","day"].nunique()
    df_arr = asma_df.groupby(["hour"]).size().reset_index()
    df_arr[0]/df_arr["hour"].map(s) 
    

    更新:

    所指的重复问题与我的不同。我在问 平均的 小时计数,而不是总小时计数。因此,这是没有帮助的。

    1 回复  |  直到 6 年前
        1
  •  2
  •   jezrael    6 年前

    avg division ,什么是 Series

    s = df.groupby(["hour"])["day"].nunique()
    df_arr = df.groupby(["hour"]).size().reset_index(name='avg')
    df_arr['avg'] /= df_arr["hour"].map(s)
    #alternative
    #df_arr = df_arr.assign(avg = df_arr['avg'] / df_arr["hour"].map(s))
    print (df_arr)
       hour  avg
    0    10  1.5
    1    11  3.0
    

    DataFrame reset_index

    g = df.groupby(["hour"])["day"]
    df_arr = g.size().div(g.nunique()).reset_index(name='avg')
    print (df_arr)
       hour  avg
    0    10  1.5
    1    11  3.0
    

    mean

    df_arr = df.groupby(["hour"])["day"].agg(['size','nunique'])
    df_arr['avg'] = df_arr['size'] / df_arr['nunique']
    print (df_arr)
          size  nunique  avg
    hour                    
    10       3        2  1.5
    11       6        2  3.0