【问题标题】:Pandas: drop row if one column duplicate and another column distinct熊猫:如果一列重复而另一列不同,则删除行
【发布时间】:2019-12-14 04:01:09
【问题描述】:

我想删除 pandas 数据框中的行,其中一列 A 中的值是重复的,而另一列 B 中的值在给定 A 的情况下不重复。一个说明性示例:

df = pd.DataFrame({'A': ['cat', 'dog', 'cat', 'cat', 'bat'],
                   'B': ['x', 'y', 'x', 'z', 'z'],
                   'C': [10, 20, 30, 40, 50]})

所需的输出已删除第 3 行,因为“cat”是重复的,“z”在“cat”行中是不同的:

df.drop_duplicates('A') 删除第 2 行和第 3 行,df.drop_duplicates(subset=['A', 'B']) 删除第 2 行;我在这里寻找的也不是 [1]。

【问题讨论】:

    标签: python pandas dataframe duplicates


    【解决方案1】:

    也许是这样的:

    df[(~df.duplicated('A')) | df.duplicated(['A','B'])]
    

    输出:

         A  B   C
    0  cat  x  10
    1  dog  y  20
    2  bat  z  30
    3  cat  x  40
    

    【讨论】:

    • 它似乎有效。我也在原始数据集上尝试过,看看它也在那里工作。谢谢! (另外,我刚刚更正的问题代码中有错字)
    【解决方案2】:

    IIUCtransform

    df[df.B==df.groupby('A').B.transform('first')]
    Out[11]: 
         A  B   C
    0  cat  x  10
    1  dog  y  20
    2  cat  x  30
    4  bat  z  50
    

    【讨论】:

      猜你喜欢
      • 2019-12-14
      • 2021-04-21
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多