按唯一组的数量对Pandas列进行排序

问题描述 投票:1回答:1

我正在尝试从kaggle Housing Prices数据集中对一部分分类数据进行排序。我正在尝试按唯一类别的数量对列进行排序。为了避免问题混乱,我已经包含了一小部分数据框(总共80列)来演示问题。

    LotConfig    Street    MSZoning
0   Inside       Pave      RL
1   FR2          Pave      RL
2   Corner       Grvl      RL

我的目标是对列进行排序以实现以下结果。

    MSZoning    Street    LotConfig    
0   RL          Pave      Inside       
1   RL          Pave      FR2          
2   RL          Grvl      Corner      

我目前正在使用以下代码。

sorted_categories =  sorted(df.columns, key = lambda col: df[col].nunique())
df = df[sorted_categories]

有没有更好的方法来解决这个问题?我错过了一个实现这个的熊猫方法吗?

python pandas kaggle
1个回答
1
投票

您可以直接调用nunique并使用结果索引您的初始DataFrame:

u = df.nunique().sort_values().index
df[u]

  MSZoning Street LotConfig
0       RL   Pave    Inside
1       RL   Pave       FR2
2       RL   Grvl    Corner

df.nunique()将返回每列的一系列唯一值。

>>> df.nunique()
LotConfig    3
Street       2
MSZoning     1
dtype: int64

然而,就你的小例子而言,你的方法实际上比我的更快,虽然有点冗长。我会在你的实际DataFrame上测试它,因为你的方法不正确,如果它提高了性能,我会改用它。我相信我的方法在大框架上应该更快,因为它避免多次调用nunique

© www.soinside.com 2019 - 2024. All rights reserved.