2017-07-12 55 views
2

我正在寻找为我的数据框中的每个列找到唯一值。 (独特的价值观为整个数据帧)为每列找到唯一值

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

Col1中有C作为一个独特的价值,col2的现在没有和COL3有F.

任何天才的想法?谢谢 !

+0

您是否优先考虑效率或代码优雅?你的DataFrame有多大? – ntg

回答

3

可以使用stackSeries,然后drop_duplicates - keep=False全部删除,由reset_index和最后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 
+0

非常感谢!有效 ! – hdatas

+0

很高兴能帮助,谢谢。如果每个组中有多个唯一值,并且某些列没有唯一值,我也会添加解决方案。 – jezrael

0

我不相信这是你想要什么,但有用的信息 - 您可以通过找到一个数据帧唯一值numpy的的.unique()像这样:

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

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

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