为每列查找唯一值
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']
我正在寻找数据框中每一列的唯一值。 (整个数据框的唯一值)
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']