保留 pandas 列中项目出现次数最多的数据框行

Retaining pandas dataframe rows which have maximum number of item occurrences in a column

我有一个 pandas 数据框

import pandas as pd

df =pd.DataFrame({'name':['john','joe','bill','richard','sam'],
                  'cluster':['1','2','3','1','2']})

df['cluster'].value_counts() 将根据列 cluster.

给出项目出现的次数

是否可以仅保留在列 cluster 中出现次数最多的行?

预期输出为

簇 1 和 2 的出现次数相同,因此需要保留簇 1 和 2 的所有行。

按 'cluster' 分组并使用 transform('count') 获得一系列具有适当形状的簇。然后用它来仅屏蔽对应于最大出现次数的行。

cluster_counts = df.groupby('cluster')['name'].transform('count')
res = df[cluster_counts == cluster_counts.max()]

输出:

>>> res

      name cluster
0     john       1
1      joe       2
3  richard       1
4      sam       2

设置:

import pandas as pd

df = pd.DataFrame({'name':['john','joe','bill','richard','sam'],
                   'cluster':['1','2','3','1','2']})

你可以通过df['cluster'].value_counts()获取cluster值的最大计数,然后使用isin过滤cluster

c = df['cluster'].value_counts()

out = df[df['cluster'].isin(c[c.eq(c.max())].index)]
print(out)

      name cluster
0     john       1
1      joe       2
3  richard       1
4      sam       2

使用这个

# find the most common clusters then filter those clusters
df[df.cluster.isin(df.cluster.mode())]