我一直在努力找出每种类型餐厅中出现频率最高的前3个餐厅名称
这些列包括:rest_type
-表示餐馆类型的列name
-餐厅名称列url
-用于计数发生次数的列
这是经过一番搜索后最终为我工作的代码:
df_1=df.groupby(['rest_type','name']).agg('count')
datas=df_1.groupby(['rest_type'], as_index=False).apply(lambda x : x.sort_values(by="url",ascending=False).head(3))
['url'].reset_index().rename(columns={'url':'count'})
最后产出如下:
我有几个关于以上代码的问题:
我们如何能够在之前对datas变量进行分组后再次使用rest_type
进行groupby操作?它应该不会给出缺少列的错误吗?第二个groupby操作对我来说有点混乱。
第一个列level_0
表示什么?我尝试了as_index=True
的代码,它创建了一个索引和属于rest_type
的列,所以我无法重置索引。输出如下:
谢谢
2条答案
按热度按时间ttvkxqim1#
您可以再次使用
groupby
,因为它出现在groupby可以识别的索引中。level_0
来自reset_index
命令,因为您的索引未命名。也就是说,如果我理解了你的数据集,我觉得你可以更容易地实现你的目标:
编辑:这里有一个替代方法,可以将结果格式化为带有信息性列名的 Dataframe
dw1jzc5e2#
我有一个类似的例子,上面的查询看起来部分工作。在我的例子中,同现值总是1。在我的输入 Dataframe 中。
我的疑问如下
top_five_family_cooccurence_df = (common_top25_cooccurance1_df.groupby('family') .apply(lambda x: x['related_family'].value_counts().nlargest(5)) .reset_index().rename(columns={'related_family': 'cooccurence', 'level_1': 'related_family'}) )
我得到的结果为
其中同现总是给我1.