【问题标题】:Find unique values for each column查找每列的唯一值
【发布时间】:2017-07-12 11:45:51
【问题描述】:

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

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

Col1 有 C 作为唯一值,Col2 没有,Col3 有 F。

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

【问题讨论】:

  • 您优先考虑效率还是代码优雅?你的 DataFrame 有多大?

标签: python pandas numpy dataframe counter


【解决方案1】:

您可以将stack 用于Series,然后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

【讨论】:

  • 很高兴能帮上忙,谢谢。如果每组有多个唯一值且某些列没有唯一值,我还会添加解决方案。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多