为每列查找唯一值

Find unique values for each column

我正在寻找数据框中每一列的唯一值。 (整个数据框的唯一值)

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

Col1 具有 C 作为唯一值,Col2 具有 none,Col3 具有 F.

有什么天才的想法吗?谢谢!

您可以使用 stack for Series, then drop_duplicates - keep=False remove all, remove first level by reset_index and last reindex:

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

我不相信这正是您想要的,但作为有用的信息 - 您可以使用 numpy 的 .unique() 找到 DataFrame 的唯一值,如下所示:

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

您还可以获得特定列的唯一值,例如Col3:

>>> df.Col3.unique()
['B' 'F']