熊猫丢弃具有不同列值的不同行

时间:2020-08-31 16:23:08

标签: python pandas dataframe

我有一个看起来像这样的DataFrame df = pd.DataFrame({'col1': ["a","b","c","d","e", "e"], 'col2': [1,3,3,2,6,6], 'col3': [1,2,3,4,5,6]})

输入:

     col1 col2 col3
    0   a   1   1
    1   b   3   2
    2   c   3   3
    3   d   2   4
    4   e   6   5
    5   e   6   6

我想从“ col1”中删除在“ col2”中具有相同值的行,除了相同的值(即字母“ e”)。我希望它是“ col1”中只有一个值可以等于“ col2”中唯一的值的地方,期望的输出看起来像是...

输出:

     col1 col2 col3
    0   a   1   1
    3   d   2   4
    4   e   6   5
    5   e   6   6

这样做的过程是什么?

2 个答案:

答案 0 :(得分:2)

根据您的描述,我理解如下:

  1. 如果两行在col2中具有相同的值,则它们都将被删除。
  2. 如果两行在col2中具有相同的值,但在col1中具有相同的值,则要保留它们。
  3. 您希望保留的其他所有不属于上述两个类别的行。

这可以通过以下方式实现:

df[np.logical_or(~df.duplicated('col2', keep = False),df.duplicated('col1', keep = False)) ]

答案 1 :(得分:2)

您可以执行以下操作:

df[df.col1.duplicated(keep=False) | ~df.col2.duplicated(keep=False)]

输出

| col1   |   col2 |   col3 |
|:-------|-------:|-------:|
| a      |      1 |      1 |
| d      |      2 |      4 |
| e      |      6 |      5 |
| e      |      6 |      6 |