如何使用pandas按顺序标记多个类别(多行)?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用pandas按顺序标记多个类别(多行)?相关的知识,希望对你有一定的参考价值。
我有一个pandas数据帧(在python中),我想标记编码两列准备好训练机器学习模型。将其从分类数据转换为数字。 (我还没有期待OneHotEncode数据)
我有一个数据框,其中包含类似的数据(一旦订购):
Main_Category Sub_Category
Cat_0 Sub_1
Cat_1 Cub_1
Cat_1 Aub_2
Cat_2 Sub_3
数据遵循以下关系,其中主类别可以具有许多唯一子类别。我想首先按Main_Category然后按Sub_Category对数据帧进行排序。这将按主要类别将所有子类别组合在一起。
df = df.sort_values(['Main_Category', 'Sub_Category'], ascending=[True, True])
然后我想编码数据,使它看起来像这样:
Main_Category Sub_Category
0 0
1 1
1 2
2 3
但是,当我对数据进行编码时,我得到它编码如下:
Main_Category Sub_Category
0 2
1 0
1 1
2 3
我相信编码库正在对数据进行排序,然后根据这些结果进行编码。我希望它基于我自己的排序编码。什么是理想的解决方案?
这是用于编码列的代码:
from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()
df['Main_Category'] = labelencoder.fit_transform(df['Main_Category'])
labelencoder = LabelEncoder()
df['Sub_Category'] = labelencoder.fit_transform(df['Sub_Category'])
编辑:我无法显示真实数据,这就是为什么我的问题有虚拟数据。编辑:更新了sub_category名称以更好地显示错误
答案
是的,正如你所提到的,labelencoder
排序internally。如果您希望按照您喜欢的顺序进行编码。试试吧!
from sklearn.preprocessing.label import _encode
unique_main_cat, ind = np.unique(df.Main_Category, return_index=True)
#unique_main_cat would have sorted unique values, to get the original order,
#use argmin(ind)
_encode(df['Main_Category'],uniques=unique_main_cat[np.argsort(ind)],encode=True)
#
(array(['Cat_0', 'Cat_1', 'Cat_2'], dtype=object), array([0, 1, 1, 2]))
unique_sub_cat, ind = np.unique(df.Sub_Category, return_index=True)
_encode(df['Sub_Category'],uniques=unique_sub_cat[np.argsort(ind)],encode=True)
#
(array(['Sub_1', 'Aub_2', 'Cub_1', 'Sub_3'], dtype=object), array([0, 1, 2, 3]))
以上是关于如何使用pandas按顺序标记多个类别(多行)?的主要内容,如果未能解决你的问题,请参考以下文章
Pandas 数据框:如何按多值列将一行拆分为多行? [复制]