Выбор уникальной комбинации из текстового столбца во фрейме данных - PullRequest
2 голосов
/ 05 июня 2019

У меня есть два столбца в моем наборе данных, как показано ниже.Я хочу выбрать только одну комбинацию из всех «похожих» комбинаций.В этом случае (апельсин, фрукты) и (фрукты, апельсин) эквивалентны, поэтому мне нужен только один из них.Кроме того, теперь, когда фрукты сопоставлены с апельсином, мне больше ничего не нужно для фруктов.Таким образом, в основном (фрукт, красный) станет (оранжевый, красный)

C1      C2
orange  fruit
orange  color
orange  apple
apple   red
apple   fruit
fruit   red
fruit   apple
fruit   mango
fruit   orange

Это код, который я пробовал в Python

# Convert data frame to set of tuples

l = []

for i,x in df.iterrows():
    l.append((x['C1'],x['C2']))

s_comb = set(l)

# Set of unique values from C1
s = set(list(df['C1']))

#Initialize x with first element of s
x = list(df['C1'])[0]
x=[x]

# Code for creating combinations

for i in s:
    if i not in x:
        for j in x:
            if (i,j) not in s_comb:
                x.append(i)

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

C1      C2
orange  fruit
orange  color
orange  apple
orange  red
orange  mango

В настоящее время код занимает очень много времени, и я не уверен в точности вывода кода.

1 Ответ

4 голосов
/ 05 июня 2019

Для первой части вопроса вы можете сделать это:

df['C'] = df.apply(lambda x: (str(set(x[['C1', 'C2']]))), axis=1)
df = df.drop_duplicates(subset='C')[['C1', 'C2']] 

Для второй части вы можете сделать что-то похожее:

df['Cmin'] = df.apply(lambda x: min(x[['C1', 'C2']]), axis=1)
df = df.drop_duplicates(subset='Cmin')[['C1', 'C2']] 

df['Cmax'] = df.apply(lambda x: max(x[['C1', 'C2']]), axis=1)
df = df.drop_duplicates(subset='Cmax')[['C1', 'C2']] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...