按唯一组的数量对 Pandas 列进行排序
Sort Pandas columns by number of unique groups
我正在尝试从 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]
有没有更好的办法解决这个问题?我是否缺少实现此目的的 pandas 方法?
您可以直接调用 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()
将 return 每列一系列唯一值。
>>> df.nunique()
LotConfig 3
Street 2
MSZoning 1
dtype: int64
但是,在你的小例子中,你的方法实际上比我的更快,尽管有点冗长。我会在您的实际 DataFrame 上对此进行测试,因为您的方法并没有错,如果它提高了性能,我会改用它。我相信我的方法在大框架上应该更快,因为它避免多次调用 nunique
。
我正在尝试从 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]
有没有更好的办法解决这个问题?我是否缺少实现此目的的 pandas 方法?
您可以直接调用 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()
将 return 每列一系列唯一值。
>>> df.nunique()
LotConfig 3
Street 2
MSZoning 1
dtype: int64
但是,在你的小例子中,你的方法实际上比我的更快,尽管有点冗长。我会在您的实际 DataFrame 上对此进行测试,因为您的方法并没有错,如果它提高了性能,我会改用它。我相信我的方法在大框架上应该更快,因为它避免多次调用 nunique
。