python - 如何在 Pandas 的一个数据框中对两个类别进行分类

标签 python pandas indexing categories

我有一个 pd,其中包含两个包含 150 个类别的分类列。可能A 列中的值未出现在B 列中。例如

a = pd.DataFrame({'A':list('bbaba'),  'B':list('cccaa')})
a['A'] = a['A'].astype('category')
a['B'] = a['B'].astype('category')

输出为

Out[217]: 
   A  B
0  b  c
1  b  c
2  a  c
3  b  a
4  a  a

还有

cat_columns = a.select_dtypes(['category']).columns
a[cat_columns] = a[cat_columns].apply(lambda x: x.cat.codes)
a

输出为

Out[220]: 
   A  B
0  1  1
1  1  1
2  0  1
3  1  0
4  0  0

我的问题是,在 A 列中,b 被视为 1,但在 B 列中,c 被视为1。但是,我想要这样的东西:

Out[220]: 
   A  B
0  1  2
1  1  2
2  0  2
3  1  0
4  0  0

其中 2 被视为 c

请注意,我有 150 个不同的标签。

最佳答案

使用pd.Categorical()您可以指定类别列表:

In [44]: cats = a[['A','B']].stack().sort_values().unique()

In [45]: cats
Out[45]: array(['a', 'b', 'c'], dtype=object)

In [46]: a['A'] = pd.Categorical(a['A'], categories=cats)

In [47]: a['B'] = pd.Categorical(a['B'], categories=cats)

In [48]: a[cat_columns] = a[cat_columns].apply(lambda x: x.cat.codes)

In [49]: a
Out[49]:
   A  B
0  1  2
1  1  2
2  0  2
3  1  0
4  0  0

关于python - 如何在 Pandas 的一个数据框中对两个类别进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215136/

相关文章:

python - 如何使用 Stanford NLP Tagger 和 NLTK 提高速度

python - 如何在python中替换回车并将unix返回转换为windows返回?

python - 如何从 Numpy 数组中删除最后 n 行?

python - 获取数据框中值的组合并实现一个函数

python - 向 MultiIndex DataFrame/Series 添加一行

python - 使用 xlwt 在 excel 上插入图像 base 64

python - 如何检查值是否在数据帧或 numpy 数组中的两个连续行之间?

python - 匹配2个不同的数据帧返回值然后进行比较

python - 从python中的特定索引值排序列表

mysql - mysql 如何处理两个相等的索引?