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

vh0rcniy  于 2023-04-10  发布在  其他
关注(0)|答案(9)|浏览(129)

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

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

问题是我得到的输出是None

x9ybnkn6

x9ybnkn61#

最快代码

对于大 Dataframe :

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

zvokhttg2#

我更喜欢oneliner:

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

yqyhoc1h3#

我建议使用numpy的sort,因为pandas在后台就是这么做的:

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

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

ktca8awb

ktca8awb4#

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

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

解决您的问题:

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

列表类型答案:

[1, 2, 3, 6, 8]
kknvjkwl

kknvjkwl5#

奇怪的是没有人提出这个建议:

df['A'].sort_values().unique()
nuypyhwy

nuypyhwy6#

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]
wlwcrazw

wlwcrazw7#

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]
kh212irz

kh212irz8#

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

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

mwyxok5s9#

今天我自己也遇到了这个问题。我认为你的代码返回'None'(和我用同样的方法得到的结果一样)的原因是

a.sort()

调用sort函数来改变列表a。在我的理解中,这是一个修改命令。要查看结果,必须使用print(a)。
我的解决方案,当我试图把所有东西都保存在pandas中时:

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

相关问题