Устранение повторения столбца в Pandas Dataframe - PullRequest
0 голосов
/ 05 августа 2020

У меня есть кадры данных, в которых я пытаюсь найти все возможные комбинации самого себя и своей части. Следующие ниже фреймы данных - это сильно уменьшенная версия того, что я использую. Первый фрейм данных (fruit1) является частью второго фрейма данных (fruit2).

FruitSubDF     FruitFullDF
apple           apple
cherry          cherry
banana          banana
                peach
                 plum

Выполнив следующий код

 df1 = pd.DataFrame(list(product(fruitDF.iloc[0:3,0], fruitDF.iloc[0:5,0])), columns=['fruit1', 'fruit2'])

, вы получите

    Fruit1 Fruit2
0    apple  banana
1    apple  apple
2    apple  cherry
3    apple  peach
4    apple  plum
5   cherry banana
6   cherry apple
7   cherry cherry
.
.
18   banana banana
19   banana peach
20   banana plum

Моя проблема в том, что я хочу удалить элементы с одинаковыми двумя фруктами, независимо от того, какой фрукт находится в каком столбце, как показано ниже. Поэтому я рассматриваю (apple, cherry) и (cherry, apple) как одно и то же, но я не уверен в эффективном способе вместо iterRows отсеять нежелательные данные, поскольку большинство pandas функций, которые я нахожу, удаляются в зависимости от порядка.

    Fruit1 Fruit2
 0   apple banana
 1   apple cherry
 2   apple apple
 3   apple peach
 4   apple plum
 5  cherry banana
 6  cherry cherry
 .
 .
 15  banana plum

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Во-первых, я создал фрагмент кода для репликации вашего DataFrame. Я взял здесь свой код: переполнение стека

import pandas as pd


Fruit1=['apple', 'cherry', 'banana']
Fruit2=['banana', 'apple', 'cherry']



index = pd.MultiIndex.from_product([Fruit1, Fruit2], names = ["Fruit1", "Fruit2"])

df = pd.DataFrame(index = index).reset_index()

Затем вы можете использовать лексикографический порядок для фильтрации фрейма данных.

df[df['Fruit1']<=df['Fruit2']]

У меня есть результат, который вы хотел получить.

EDIT: вы отредактировали свой пост, но, похоже, он все еще выполняет свою работу.

0 голосов
/ 05 августа 2020

Вы можете использовать itertools для этого -

import itertools
fruits  = ['banana', 'cherry',  'apple']
pd.DataFrame((itertools.permutations(fruits, 2)), columns=['fruit1', 'fruit2'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...