Панды включающие уникальные значения из двух столбцов - PullRequest
1 голос
/ 15 марта 2019

Я не могу найти какой-либо элегантный способ выбрать уникальные строки из столбца A и столбца B, но не совместно и не в последовательности. Это сделано для того, чтобы сохранить «включающее» пересечение уникальных значений из этих двух столбцов.

Моя цель - сохранить как можно больше уникальных значений в столбцах A и B. Столбцы рассматриваются совместно, но я ищу все уникальные «комбинации» их значений ...

Пример кадра данных

df1 = pd.DataFrame({"A": [ "A1", "A2", "A2", "A3", "A3", ],
                    "B": [ "B1", "B1", "B2", "B3", "B1", ], },
                   index=[ 0, 1, 2, 3, 4, ])

Результат:

    A   B
0  A1  B1
1  A2  B1
2  A2  B2
3  A3  B3
4  A3  B1

Ничего полезного ...

df2 = df1.drop_duplicates( subset=[ "A", "B", ], keep="first", inplace=False, )

Результат:

    A   B
0  A1  B1
1  A2  B1
2  A2  B2
3  A3  B3
4  A3  B1

Приведенный ниже код оставляет дубликат B1, который можно удалить позже, используя drop_duplicates в столбце B, но затем A2 также будет удален, и его можно было бы сохранить, если он присутствовал в одной строке с B2, как это было на index=2 исходного кадра данных.

df3 = df1.drop_duplicates( subset=[ "A", ], keep="first", inplace=False, )

Результат:

    A   B
0  A1  B1
1  A2  B1
3  A3  B3

Как уже упоминалось выше, A2 удаляется, но была возможность сохранить его, если он присутствовал в одной строке с B2, как это было в index=2 исходного кадра данных.

df4 = df3.drop_duplicates( subset=[ "B", ], keep="first", inplace=False, )

    A   B
0  A1  B1
3  A3  B3

Желаемый результат:

    A   B
0  A1  B1
1  A2  B2
2  A3  B3

Поэтому моя цель - сохранить как можно больше уникальных значений в столбцах A и B. Столбцы рассматриваются совместно, но я ищу все уникальные «комбинации» их значений ...

1 Ответ

0 голосов
/ 15 марта 2019

Попробуйте ниже код:

df1.drop_duplicates( subset=[ "A" and "B"], keep="first", inplace=False, )

Выход:

    A   B
0   A1  B1
2   A2  B2
3   A3  B3
...