Python 我怎样才能获得熊猫中的前n组?

Python 我怎样才能获得熊猫中的前n组?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框。数据框中的最后一列是数据框中每个唯一组(在本例中为物种分配)的RelAb列的最大值,如下所示: df_melled['Max']=df_melled.groupby('Species')['RelAb'].transform('Max')) 如您所见,最大值表示在组的所有行中。每个组都包含大量行。我有按最大值排序的df,每个最大值大约有100行。我的目标是根据最大值(即adf,100 X 20行-2000行)获得前20个组。我不想从数据帧中的组中删除单个行,而是删除整个组

我有一个熊猫数据框。数据框中的最后一列是数据框中每个唯一组(在本例中为物种分配)的
RelAb
列的最大值,如下所示:

df_melled['Max']=df_melled.groupby('Species')['RelAb'].transform('Max'))
如您所见,最大值表示在组的所有行中。每个组都包含大量行。我有按最大值排序的
df
,每个最大值大约有100行。我的目标是根据最大值(即a
df
,100 X 20行-2000行)获得前20个组。我不想从数据帧中的组中删除单个行,而是删除整个组

我正在粘贴数据帧的子集,其中组的最大值从一个“最大”值更改为下一个:

我的感觉是,我需要转换最大值,使一个值代表整个组,然后根据该列进行排序,也许如此

df地址查询“>

就上下文而言,我这样做的原因是因为我计划为每个样本制作一个包含表中最丰富物种的堆叠条形图。现在,物种太多了,所以这使得堆叠条形图缺乏信息。

一种方法:


aux=(df_.groupby('Species')['RelAb']
.max()
.NLAGEST(20,保留所有)
.to_list())
top20=df_melled.loc[df_melled['Max'].isin(辅助),:].copy()

。这个问题很可能会被否决。你不希望得到帮助,因为没有人想重新键入你的数据或代码,而且屏幕截图通常难以辨认。你好,特伦顿,听起来不错。我尝试过使用剪贴板,但遇到了问题,因为stack说我没有足够的积分。实际上,在阅读链接之后您发送了@Trenton,我意识到这根本不是我上传数据帧所采用的方法。下次我将遵循这些步骤。您好@Usink,此解决方案运行良好。如果您有额外的时间,您能解释一下这些步骤中发生了什么吗?您的解决方案实现了我用来生成
Max
的代码,但我我很好奇,你是否可以绕过添加该列,或者将该步骤合并到你的行中以使其更简洁?我对python/pandas相当陌生,所以我只是要求更好地理解一些东西。当然@Protaeus!我的代码中发生了这样的事情:我再次按组计算最大值,但现在使用
apply
me折叠数据帧以便组不会重复的方法(即,在您的情况下,这意味着B.dorei的一行,Prevotella的一行等)。这给了我们一个系列,然后我应用了
nlargest
方法,在本例中选择20个最大的元素。然后我使用
isin
方法得到一个布尔数组,指示
Max
的值是否是20个最大的元素之一(
isin(iterable)
测试iterable中的元素)@Protaeus,您可以通过将
.to_list()
替换为
.index
,然后将
df_melled['Max']
替换为
df_melled['Species']
。我们的想法是通过最大松弛度获得前20名物种的名称,然后选择具有这些名称的观测值。希望这能有所帮助。谢谢,@usink!我非常感谢您提供的信息。您提到使用
apply
方法,但我没有看到显式调用该方法?不管怎样,它是有效的:-)什么是
copy()
do?我阅读了文档,但不太清楚它在这方面做了什么,以及我将来可能如何使用它。我从你提供给其他人的答案中看到,你经常返回到它。@Protaeus,很抱歉
apply
这件事,当时正在考虑smth else:D实际上,我调用
max
methodod、
copy()
明确表示您正在创建一个新的数据帧,而不仅仅是从旧数据帧中进行选择。这样,您就可以安全地更改新数据帧中的任何内容,而不会影响原始数据帧。