在Pandas的groupby对象上使用count()函数获取最大值

5

问题

使用pandas,我需要针对每个groupby对象返回计数最大的行。

数据集

我有一个名为“matches”的数据框,看起来像这样:

FeatureID gene pos 0 1_1_1 KRAS_1 6 1 1_1_1 KRAS_2 8 2 1_1_1 KRAS_3 11 3 1_1_1 NRAS_1 3 4 1_1_1 NRAS_2 11 5 1_1_1 NRAS_3 84 6 1_1_10 KRAS_1 4 7 1_1_10 KRAS_2 3 8 1_1_10 KRAS_3 14 9 1_1_10 NRAS_1 4 10 1_1_10 NRAS_2 6 11 1_1_10 NRAS_3 83

我尝试过的方法

我需要按FeatureID将数据框分组,然后获取每个组中位置的计数:

matches.groupby(["FeatureID", "gene"]).count()

这导致结果如下:

FeatureID gene 1_1_1 KRAS_1 6 KRAS_2 8 KRAS_3 11 NRAS_1 3 NRAS_2 11 NRAS_3 84 1_1_10 KRAS_1 4 KRAS_2 3 KRAS_3 14 NRAS_1 4 NRAS_2 6

期望输出:

我需要找到每个groupby对象中包含最高计数的行,但我不知道如何做到这一点。

FeatureID gene count 1_1_1 NRAS_3 84 1_1_10 KRAS_3 14

解决方案

以下代码可以找到每个groupby组中具有最大值的基因:

matches.groupby(["FeatureID", "gene"]).count().sort_values("pos").groupby(level=0).tail(1)
1个回答

10

您可以在 level=0 上使用 max

matches.groupby(["FeatureID", "gene"]).count().max(level=0)

如果保持两个级别

df.groupby(["FeatureID", "gene"]).count().sort_values().groupby(level=0).tail(1)

啊!我没意识到max函数有一个“level”参数。谢谢!那么,如何保留哪个基因具有最大计数的信息? - SummerEla
这在大数据集上不起作用,还有其他可能的方法吗? - Xavier Bourret Sicotte
1
你可以在 groupby 中传递 max 作为参数:df.groupby(["FeatureID", "gene"]).agg(['max']). - Jack Armstrong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接