在列中找到唯一值,然后对其进行排序


82

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

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

问题是我得到了None输出。


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

Answers:


120

sorted从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]

19

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]

11

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

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

3
drop_duplicates()在14107693行[Pandas 0.18]的数据帧上发现其比unique()快3倍
fixxxer

7

我更喜欢oneliner:

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

6

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

a.sort()

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

我的解决方案,因为我试图将所有东西都保留在大熊猫中:

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

我喜欢该pandas解决方案,因为它将NaN值放在最后并可以处理混合类型的数组。
HS星云

4

我建议使用numpy的sort,因为无论如何这是熊猫在后台执行的操作:

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

但是在大熊猫中做所有事情也是有效的。


0

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

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

解决您的问题:

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

列表类型的答案:

[1, 2, 3, 6, 8]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.