0

我正在尝试对每个第 n 个类别进行子集化,然后附加最后一个类别。

这是一个例子:

1)制作类别

import pandas as pd
import numpy as np
a = np.arange(0, 10, 1)
b = np.arange(0, 10, 1)
c = pd.cut(x = b.tolist(), bins = a, right = True, include_lowest = True)

2)子集类别

sub_c = c[0::4]

这就是麻烦,我想将最后一个类别附加到sub_c,例如:

sub_c.append(c[-1])但我得到了错误:'Categorical' object has no attribute append.

那么我如何将这个类别添加到最后呢?

4

2 回答 2

0

您可以选择最后一个类别以及其他类别:

sub_c = c[list(range(0, c.size, 4)) + [-1]].remove_unused_categories()
#[(-0.001, 1.0], (3.0, 4.0], (7.0, 8.0], (8.0, 9.0]], ...

另一种选择是准备分类代码列表:

codes = np.concatenate([c[0::4].codes, c[[-1]].codes])
sub_c = c.from_codes(codes, c.categories).remove_unused_categories()
#[(-0.001, 1.0], (3.0, 4.0], (7.0, 8.0], (8.0, 9.0]], ....

不要忘记调用.remove_unused_categories()以删除未使用的类别。

于 2018-05-31T04:58:26.643 回答
0

您有此错误,因为 append 是列表的属性,而不是 Categorical 对象。

因此,要修复此错误,您需要通过执行将 pandas.core.categorical.Categories 转换为列表类型

sub_c = sub_c.tolist()

然后

sub_c.append(c.tolist()[-1])

会将最后一个元素放入 sub_c 但现在 sub_c 是一个列表。

于 2018-05-31T05:00:42.003 回答