2017-07-12 9 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

それからdrop_duplicatesSeriesためstackを使用することができます - keep=Falsereset_indexと最後reindexすることにより、第1のレベルを削除し、すべてを削除:上記

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 

ソリューションは、列ごとに1つだけのユニークな値ならば素敵な作品。

私はより一般的なソリューションを作成してみてください。

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'] 
関連する問題