gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:37:39 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com