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

时间:2018-06-24 14:29:38

标签: python pandas dataframe

我有以下DataFrame 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 个答案:

答案 0 :(得分:2)

我认为需要将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

或用reset_indexSeries和最后的信箱DataFrame

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