Панды - отбросить строку, если другая строка имеет те же значения, но столбцы переключаются

как вы можете видеть ниже, некоторые строки одинаковы, за исключением того, что значение в столбце NUM1 и значение в столбце NUM2 поменяны местами. Мне нужен только один из них.

Удаление строк на основе последних трех столбцов не является правильным ответом, поскольку таблица может содержать другие записи с теми же датами и используемым значением столбца, но с разными NUM1 и NUM2.

    NUM1    NUM2    DATE1         DATE2          USED
0   4       7       10. 9. 2002   16. 11. 2002   5,3
1   7       4       10. 9. 2002   16. 11. 2002   5,3
2   9       10      10. 9. 2002   16. 11. 2002   3,1
3   10      9       10. 9. 2002   16. 11. 2002   3,1

Новая таблица должна выглядеть так:

    NUM1    NUM2    DATE1         DATE2          USED
0   4       7       10. 9. 2002   16. 11. 2002   5,3
1   9       10      10. 9. 2002   16. 11. 2002   3,1

Спасибо за помощь!

Как определить, какую строку оставить?

richardec 20.03.2022 17:13

Неважно, мне просто нужен один из них.

Alokin 20.03.2022 17:15
1
2
26
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Возможно, вы можете взять копию столбцов и отсортировать их, а затем проверить наличие дубликатов:

x = df[['NUM1', 'NUM2']].copy()
x[:] = np.sort(x, axis=1)
filtered_df = df[~x.duplicated()]

Выход:

>>> filtered_df
   NUM1  NUM2      DATE1       DATE2 USED
0     4     7  10.9.2002  16.11.2002  5,3
2     9    10  10.9.2002  16.11.2002  3,1
Ответ принят как подходящий

Попробуйте с frozenset

out = df[~df.apply(frozenset,1).duplicated()]
Out[906]: 
   NUM1  NUM2      DATE1       DATE2 USED
0     4     7  10.9.2002  16.11.2002  5,3
2     9    10  10.9.2002  16.11.2002  3,1

Круто, это хороший однострочный! Но он не векторизован... мой примерно на 400 мкс быстрее.

richardec 20.03.2022 17:46

Другие вопросы по теме