下面的情况经常出现在我的数据分析中。假设我有两个数据向量,x 和 y,来自一些观察。x 有更多的数据点,因此包含一些在 y 中没有观察到的值。现在我想把它们变成分类变量。
x=['a','b','c','d','e'] #data points
y =['a','c','e'] #data of the same nature as x but with fewer data points
fx = pandas.Categorical.from_array(x)
fy = pandas.Categorical.from_array(y)
print fx.index
print fy.index
Categorical:
array([a, b, c, d, e], dtype=object)
Levels (5): Index([a, b, c, d, e], dtype=object) Categorical:
array([a, c, e], dtype=object)
Levels (3): Index([a, c, e], dtype=object)
我看到现在它们有不同的级别,标签意味着不同的东西(1 在 fx 中表示 b,但在 fy 中表示 c)。
这显然使得同时使用 fx 和 fy 的代码变得困难,因为他们期望 fx.labels 和 fy.labels 具有相同的编码/含义。
但是我看不到如何“规范化” fx 和 fy 以使它们具有相同的级别并fx.lables
具有fy.lables
相同的编码。fy.labels = fx.lables
显然不起作用。如下所示,它将标签 [ace] 的含义更改为 [abc]。
fy.levels = fx.levels
print fy
Categorical:
array([a, b, c], dtype=object)
Levels (5): Index([a, b, c, d, e], dtype=object)
有没有人有任何想法?
另一个相关场景是我有一个现有的已知索引,并且希望将数据分解到该索引中。例如,我知道每个数据点都必须采用五个值之一 [a, b, c, d, e] 并且我已经有一个索引Index([a, b, c, d, e], dtype=object)
并且我想分解向量 y=['a','c' ,'e'] 转换为一个分类变量,Index([a, b, c, d, e], dtype=object)
其级别为。我也不确定如何做到这一点,并希望知道的人提供一些线索。
PS在R中做这样的事情是可能的但很麻烦。
谢谢,汤姆