我有以下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)
更新:
指示的重复问题与我的不同。我要问的是平均小时计数,而不是总小时计数。因此,它没有帮助。
答案 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_index
除Series
和最后的信箱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