当前位置: 首页 > 面试题库 >

从pandas groupby对象中选择多个组

严扬
2023-03-14
问题内容

我正在尝试熊猫的分组依据功能,特别是

gb = df.groupby('model')
gb.hist()

由于gb有50个组,因此结果非常混乱,我只想探索前5个组的结果。

我找到了如何使用groups或选择单个组的方法get_group(如何通过key访问datagroup的pandasgroup
),但没有找到直接选择多个组的方法。我能做的最好的事情是:

groups = dict(list(gb))
subgroup = pd.concat(groups.values()[:4])
subgroup.groupby('model').hist()

有没有更直接的方法?


问题答案:

你可以做类似的事情

new_gb = pandas.concat( [ gb.get_group(group) for i,group in enumerate( gb.groups) if i < 5 ] ).groupby('model')    
new_gb.hist()

虽然,我会采取不同的方法。您可以使用该collections.Counter对象快速获取组:

import collections

df = pandas.DataFrame.from_dict({'model': pandas.np.random.randint(0, 3, 10), 'param1': pandas.np.random.random(10), 'param2':pandas.np.random.random(10)})
#   model    param1    param2
#0      2  0.252379  0.985290
#1      1  0.059338  0.225166
#2      0  0.187259  0.808899
#3      2  0.773946  0.696001
#4      1  0.680231  0.271874
#5      2  0.054969  0.328743
#6      0  0.734828  0.273234
#7      0  0.776684  0.661741
#8      2  0.098836  0.013047
#9      1  0.228801  0.827378
model_groups = collections.Counter(df.model)
print(model_groups) #Counter({2: 4, 0: 3, 1: 3})

现在,您可以Counter像字典一样遍历对象,并查询所需的组:

new_df = pandas.concat( [df.query('model==%d'%key) for key,val in model_groups.items() if val < 4 ] ) # for example, but you can select the models however you like  
#   model    param1    param2
#2      0  0.187259  0.808899
#6      0  0.734828  0.273234
#7      0  0.776684  0.661741
#1      1  0.059338  0.225166
#4      1  0.680231  0.271874
#9      1  0.228801  0.827378

现在您可以使用内置pandas.DataFrame.groupby功能

gb = new_df.groupby('model')
gb.hist()

由于model_groups包含所有组,因此您可以根据需要从中进行选择。

如果您的model列包含字符串值(名称或其他名称)而不是整数,则它们将全部相同-
只需将查询参数从更改为'model==%d'%key即可'model=="%s"'%key



 类似资料:
  • 问题内容: 尝试在angularjs中选择关于对象值的多个选项 这是一个代码: 和html jsfiddle上的(非)工作示例 http://jsfiddle.net/andrejkaurin/h9fgK/ 问题答案: 您尝试使用选择倍数(如复选框列表),这有点奇怪。多选输出一个数组。您不能将ng- model放在这样的选项标签上,而是放在选择本身上。因此,由于select将输出值数组,因此您需要

  • 问题内容: 我想根据URL字符串选择一些ID,但对于我的代码,它仅显示第一个。如果我写手册的ID是伟大的。 我有这样的网址http://www.mydomain.com/myfile.php?theurl=1,2,3,4,5(ids) 现在在myfile.php中,我有sql连接,并且: 如果我使用这个: 我得到正确的结果。现在,如果我使用下面的代码,它将无法正常工作: 有什么建议? 问题答案:

  • 我对dataTable multiple selection with复选框有问题(如第二个复选框:http://primefaces.org/showcase/ui/datatableRowSelectionRadioCheckbox.jsf). 当我尝试在backingBean中执行一个方法时,所选的项总是具有正确的大小,但具有相同的对象。示例:我在数据表中选择三条消息:消息1、消息2和消息3

  • 我想从选择一个菜单中选择一个自定义对象。它既不显示错误也不显示值。我该怎么办? 我的xhtml文档: 我的管理Bean类:

  • 我是打字新手。我想从可观察的 这是我可以观察到的 预期结果: 可以不创建数组并在for循环中推送ID吗。

  • 用于选择对象的选项 在可以修改某个对象之前,需要将其与周围的对象区分开来。只需选择对象,即可加以区分。只要选择了对象或者对象的一部分,即可对其进行编辑。 Illustrator 提供以下选择方法和工具: 隔离模式可让您快速将一个图层、子图层、路径或一组对象与文档中的其他所有图稿隔离开来。在隔离模式下,文档中所有未隔离的对象都会变暗,并且不可对其进行选择或编辑。 图层面板可让您快速而准确地选择单个或