Pandas - 保留具有确定值的行并删除其余行

Pandas - Keeping rows with determined values and droping the rest

所以,我有这样一个数据框(重要的列是第三列):

   |  ABC  |  DEF  |  fruit |
----------------------------
1  |  12   |  LO   | banana
2  |  45   |  KA   | orange
3  |  65   |  JU   | banana
4  |  25   |  UY   | grape
5  |  23   |  TE   | apple
6  |  28   |  YT   | orange
7  |  78   |  TR   | melon

我想保留出现次数最多的 5 个水果的行并删除其余的,所以我创建了一个变量来保存这些水果以保存在列表中,如下所示:

fruits = df['fruit'].value_counts()
fruits_to_keep = fruits[:5].reset_index()
fruits_to_keep.drop(['fruit'], inplace=True, axis=1)
fruits_to_keep = fruits_to_keep.to_numpy()
fruits_to_keep = fruits_to_keep.tolist()
fruits_to_keep

[['banana'],['orange'],[apple],[melon],[grape]]

我觉得我做了不必要的步骤,但无论如何,当我尝试 select 包含那些 fruits_to_keep

的行时,问题就出现了
df = df.set_index('fruit')
df = df.loc[fruits_to_keep,:]

然后我得到关键错误说“None of [Index([('banana',), \n ('orange',), \n ('apple',)...... dtype='object', name='fruit')] 都在[index]"

我也试过:

df[df.fruit in fruits_to_keep]

但随后出现以下错误: ('Lengths must match to compare', (43987,), (1,))

Obs.:我实际上有 43k 行,其中许多 'fruits' 我不希望出现在数据框上,还有 30k+ 行,其中 5 行出现次数最多 'fruits'

提前致谢!

要保留具有前 N 个值的行,您可以使用 value_countsisin

默认情况下,value_counts returns 元素按频率降序排列。

N = 5
df[df['col'].isin(df['col'].value_counts().index[:N])]