Найдите уникальные значения для каждого столбца

Я ищу уникальные значения для каждого столбца в моем фрейме данных. (Значения уникальны для всего фрейма данных)

        Col1         Col2            Col3
1        A             A               B
2        C             A               B
3        B             B               F

Col1 имеет уникальное значение C, Col2 не имеет ничего, а Col3 имеет F.

Есть гениальные идеи? благодарю вас !


person hdatas    schedule 12.07.2017    source источник
comment
Вы ставите во главу угла эффективность или элегантность кода? Насколько велик ваш DataFrame?   -  person ntg    schedule 12.07.2017


Ответы (2)


Вы можете использовать stack для Series, затем drop_duplicates - keep=False удалить все, сначала удалить уровень reset_index и последний _ 6_:

df = df.stack()
       .drop_duplicates(keep=False)
       .reset_index(level=0, drop=True)
       .reindex(index=df.columns)
print (df)

Col1      C
Col2    NaN
Col3      F
dtype: object

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

Я пытаюсь создать более общее решение:

print (df)
  Col1 Col2 Col3
1    A    A    B
2    C    A    X
3    B    B    F

s = df.stack().drop_duplicates(keep=False).reset_index(level=0, drop=True)
print (s)
Col1    C
Col3    X
Col3    F
dtype: object

s = s.groupby(level=0).unique().reindex(index=df.columns)
print (s)
Col1       [C]
Col2       NaN
Col3    [X, F]
dtype: object
person jezrael    schedule 12.07.2017
comment
Рад, что могу помочь, спасибо. Я также добавляю решение, если несколько уникальных значений в группе с некоторыми столбцами без уникальных значений. - person jezrael; 12.07.2017

Я не верю, что это именно то, что вам нужно, но как полезная информация - вы можете найти уникальные значения для DataFrame, используя .unique() numpy следующим образом:

>>> np.unique(df[['Col1', 'Col2', 'Col3']])
['A' 'B' 'C' 'F']

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

>>> df.Col3.unique()
['B' 'F']
person flevinkelming    schedule 12.07.2017