首页 > 解决方案 > 如何使用熊猫删除一行中多次出现的行

问题描述

我有这个数据:

     A  
1    1 
2    1 
3    1  
4    2
5    2
6    1

我希望得到:

     A  
1    1 
-    -   -> (drop)
3    1  
4    2
5    2
6    1

我想删除 col ['A'] 中具有相同值的所有行,这些行出现在一行中,但没有第一个和最后一个。

直到现在我使用:

df = df.loc[df[col].shift() != df[col]]

但它也会删除最后一次出现。

对不起我的英语不好,提前谢谢。

标签: pythonpandas

解决方案


看起来你和这个问题有同样的问题:Pandas drop_duplicates。保持第一和最后。可能吗?.

建议的解决方案是:

pd.concat([
    df['A'].drop_duplicates(keep='first'),
    df['A'].drop_duplicates(keep='last'),
])

澄清后更新:

首先获取您描述的标准的布尔掩码:

is_last = df['A'] != df['A'].shift(-1)
is_duplicate = df['A'] == df['A'].shift()

并根据这些删除行:

df.drop(df.index[~is_last & is_duplicate]) # note the ~ to negate is_last 

推荐阅读