【问题标题】:Find the unique values in a column and then sort them查找列中的唯一值,然后对它们进行排序
【发布时间】:2015-11-11 08:53:15
【问题描述】:

我有一个熊猫数据框。我想按升序打印其中一列的唯一值。我就是这样做的:

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print a.sort()

问题是我得到了一个None 的输出。

【问题讨论】:

  • a.sort() 修改 a 并且不返回任何内容,因此替换为:a.sort(); print a

标签: python pandas sorting dataframe unique


【解决方案1】:

sorted(iterable):从 iterable 中的项目返回一个新的排序列表。

代码

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print(sorted(a))

输出

[1, 2, 3, 6, 8]

【讨论】:

  • 如果您的列包含具有不明确的布尔值的数据,例如 pandas 的 NAType - sorted() 将引发 TypeError,这不起作用
【解决方案2】:

sort 就地排序,因此不返回任何内容:

In [54]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
a

Out[54]:
array([1, 2, 3, 6, 8], dtype=int64)

所以你必须在拨打sort之后再次拨打print a

例如:

In [55]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
print(a)

[1 2 3 6 8]

【讨论】:

    【解决方案3】:

    您也可以使用 drop_duplicates() 代替 unique()

    df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
    a = df['A'].drop_duplicates()
    a.sort()
    print a
    

    【讨论】:

    • 在 14107693 行的数据帧上发现 drop_duplicates() 比 unique() 快 3 倍 [Pandas 0.18]
    • df['A'].drop_duplicates().sort_values() 是我的最爱
    【解决方案4】:

    我更喜欢oneliner:

    print(sorted(df['Column Name'].unique()))
    

    【讨论】:

      【解决方案5】:

      今天我自己遇到了这个问题。我认为您的代码返回“无”(正是我使用相同方法得到的)的原因是

      a.sort()
      

      正在调用排序函数来改变列表a。在我的理解中,这是一个修改命令。要查看结果,您必须使用 print(a)。

      我的解决方案,因为我试图将所有内容都保存在 pandas 中:

      pd.Series(df['A'].unique()).sort_values()
      

      【讨论】:

      • 我喜欢pandas 解决方案,因为它将NaN 值放在最后,并且可以处理混合类型的数组。
      【解决方案6】:

      我建议使用 numpy 的排序,因为无论如何 pandas 在后台正在做的事情:

      import numpy as np
      np.sort(df.A.unique())
      

      但是在 pandas 中做所有事情也是有效的。

      【讨论】:

        【解决方案7】:

        最快的代码

        对于大数据框:

        df['A'].drop_duplicates().sort_values()
        

        【讨论】:

        • 如果你为你的主张提供证据,这个答案会更有趣
        【解决方案8】:

        另一种方法是使用 set 数据类型。

        集合的一些特性集合是无序的,可以包含混合数据类型,集合中的元素不能重复,是可变的。

        解决您的问题:

        df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
        sorted(set(df.A))
        

        列表中的答案输入:

        [1, 2, 3, 6, 8]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-16
          • 1970-01-01
          • 2019-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多