首页 > 解决方案 > 从数据框中删除指定的行

问题描述

如何删除有限数量的行?到目前为止,我的代码删除了我给出的每个实例。所以在下面的例子中,'dog' 的每个实例都被删除了。但是,我想删除指定数量的实例,例如只删除 2 个 dog 实例,如果要删除的实例是随机采样的,这也是一个好处。

num = [10, 20, 30, 10, 40, 50, 20, 60, 70, 20] 
color = ['red', 'white', 'black', 'green', 'white', 'orange', 'white', 'black', 'blue', 'red'] 
animal = ['dog', 'cat', 'raccoon', 'gecko', 'bear', 'raccoon', 'dog', 'goat', 'goat', 'dog'] 


dict = {'Number': num, 'Color': color, 'Animal': animal}  
df = pd.DataFrame(dict) 

to_drop = ['dog']
trimmed_df = df[~df['Animal'].isin(to_drop)]

标签: pythonpandasdataframe

解决方案


你可以试试:

to_drop = ['dog']
s = df['Animal'].isin(to_drop)

mask = s & s.cumsum().le(2)

df[~mask]

输出:

   Number   Color   Animal
1      20   white      cat
2      30   black  raccoon
3      10   green    gecko
4      40   white     bear
5      50  orange  raccoon
7      60   black     goat
8      70    blue     goat
9      20     red      dog

更新:如果to_drop有多个标签并且您想在每个to_drop标签中删除 2 个实例,您可以执行以下操作groupby().cumcount()

mask = (df['Animal'].isin(to_drop) &
        df.groupby('Animal').cumcount().lt(2)
       )
print(df[~mask])

推荐阅读