在列中查找唯一值,然后对它们进行排序

MAS*_*MAS 50 python sorting unique dataframe pandas

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

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

问题是我得到了None输出.

Vin*_*shi 70

sorted从iterable中的项返回一个新的排序列表.


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

OUTPUT

[1, 2, 3, 6, 8]
Run Code Online (Sandbox Code Playgroud)


Ser*_*ndt 20

更快的代码

对于大数据框:

df['A'].drop_duplicates().sort_values()
Run Code Online (Sandbox Code Playgroud)

  • 如果您提供您的主张的证据,这个答案会更有趣 (9认同)
  • `drop_duplicates()` 比 `unique()` 更好,因为它可以处理多个列(数据帧),而不仅仅是单个列(系列)。 (3认同)

EdC*_*ica 13

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)
Run Code Online (Sandbox Code Playgroud)

所以你必须在打电话print a后再打电话sort.

例如.:

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]
Run Code Online (Sandbox Code Playgroud)


Bow*_*Liu 13

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

a.sort()
Run Code Online (Sandbox Code Playgroud)

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

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

pd.Series(df['A'].unique()).sort_values()
Run Code Online (Sandbox Code Playgroud)


MDM*_*313 12

我更喜欢oneliner:

print(sorted(df['Column Name'].unique()))
Run Code Online (Sandbox Code Playgroud)


Cha*_*ois 6

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

import numpy as np
np.sort(df.A.unique())
Run Code Online (Sandbox Code Playgroud)

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


Mel*_*oun 5

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

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

  • `df['A'].drop_duplicates().sort_values()` 是我的最爱 (11认同)
  • 在 14107693 行的数据帧上发现 `drop_duplicates()` 比 unique() 快 3 倍 [Pandas 0.18] (7认同)