Удалить неупорядоченные дубликаты через отдельные столбцы - PullRequest
2 голосов
/ 28 мая 2019

Я пытаюсь вернуть df, где были удалены повторяющиеся значения. Я пытался использовать drop.duplicates(), но значения в столбцах, которые были subset, не упорядочены. Как и в случае, значения являются дубликатами, но они не в том же порядке.

Например, используя df ниже, если я попытаюсь удалить повторяющиеся значения из Item_X и Item_Y, он вернет то же самое df. Где предполагаемый вывод удалит второй ряд.

import pandas as pd

d = ({
    'Item_X' : ['Foo','Bar','Bot','Bot','Bar','Foo'],                 
    'Item_Y' : ['Bar','Foo','Foo','Bot','Bar','Foo'],                 
    'Value' : [1,2,3,4,5,6],                      
     })

df = pd.DataFrame(data = d)

df.drop_duplicates(subset=['Item_X','Item_Y'])

Ожидаемый результат:

  Item_X Item_Y  Value
0    Foo    Bar      1
2    Bot    Foo      3
3    Bot    Bot      4
4    Bar    Bar      5
5    Foo    Foo      6

Фактический вывод (неверно):

  Item_X Item_Y  Value
0    Foo    Bar      1
1    Bar    Foo      2
2    Bot    Foo      3
3    Bot    Bot      4
4    Bar    Bar      5
5    Foo    Foo      6

Каков наиболее эффективный способ решения этой проблемы?

Ответы [ 2 ]

3 голосов
/ 28 мая 2019

IIUC, использование:

m=pd.DataFrame(np.sort(df[['Item_X','Item_Y']])).duplicated()
df[~m]

  Item_X Item_Y  Value
0    Foo    Bar      1
2    Bot    Foo      3
3    Bot    Bot      4
4    Bar    Bar      5
5    Foo    Foo      6
3 голосов
/ 28 мая 2019

Вам нужно будет отсортировать столбцы вдоль горизонтальной оси, а затем получить маску для подмножества исходного кадра. Вот как вы можете использовать np.sort и df.duplicated для этого:

df[~pd.DataFrame(np.sort(df2[['Item_X', 'Item_Y']], axis=1)).duplicated()]

  Item_X Item_Y  Value
0    Foo    Bar      1
2    Bot    Foo      3
3    Bot    Bot      4
4    Bar    Bar      5
5    Foo    Foo      6
...