如何在Pandas中对特定列的唯一数值进行排序?
如何对DataFrame特定列的唯一值进行排序
嘿,我来帮你搞定这个问题!你写的代码报错主要是两个小细节没处理对:
unique是pandas Series的方法,必须加括号调用(也就是.unique()),直接写.unique只会拿到方法对象,不是实际的唯一值集合;unique()返回的是numpy数组,它没有pandas里的sort_values()方法;反过来,sort_values()是Series的方法,执行后返回的是排序后的Series,但你不能直接在后面接.unique()(语法上不支持这么链式调用)。
下面给你几种正确的实现方式:
方法1:先取唯一值,转成Series后排序
这种方式最直观,先拿到所有唯一值,再用pandas的排序方法处理:
import pandas as pd # 先获取campaign_id的唯一值,转成Series后排序 sorted_unique_ids = pd.Series(testdata['campaign_id'].unique()).sort_values()
如果需要把结果转回numpy数组,只需要加.values或者.to_numpy()就行。
方法2:先排序原列,再取唯一值
因为排序后相同的campaign_id会集中在一起,这时候取唯一值自然就是有序的:
sorted_unique_ids = testdata['campaign_id'].sort_values().unique()
这个方法代码更简洁,返回的是numpy数组,如果需要Series的话再转一下就行。
方法3:用numpy的sort直接排序唯一值数组
既然unique()返回的是numpy数组,直接用numpy的排序方法更高效:
import numpy as np sorted_unique_ids = np.sort(testdata['campaign_id'].unique())
这个方法适合只需要有序数组的场景,性能比转Series排序更好。
内容的提问来源于stack exchange,提问作者stone rock
相关产品推荐
相关产品推荐

