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

Sum*_*Ela 2 python pandas pandas-groupby

问题

使用 Pandas,我需要为每个 groupby 对象取回具有最大计数的行。

数据集

我有一个名为“匹配”的数据框,如下所示:

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()
Run Code Online (Sandbox Code Playgroud)

结果是:

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)
Run Code Online (Sandbox Code Playgroud)

WeN*_*Ben 5

你可以做max的level=0

matches.groupby(["FeatureID", "gene"]).count().max(level=0)
Run Code Online (Sandbox Code Playgroud)

如果保持两个水平

df.groupby(["FeatureID", "gene"]).count().sort_values().groupby(level=0).tail(1)
Run Code Online (Sandbox Code Playgroud)