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

问题描述 投票:0回答:9

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

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

问题是我的输出得到了

None

python pandas sorting dataframe unique
9个回答
363
投票

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]

45
投票

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)

所以你必须在拨通

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]

34
投票

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

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

19
投票

更快的代码

对于大数据框:

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

15
投票

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

a.sort()

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

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

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

14
投票

我更喜欢oneliner:

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

7
投票

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

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

但是在 pandas 中完成所有操作也是有效的。


4
投票

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

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

解决您的问题:

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

List类型中的答案:

[1, 2, 3, 6, 8]

1
投票

很惊讶没有人建议这样做:

df['A'].sort_values().unique()
© www.soinside.com 2019 - 2024. All rights reserved.