次の状況は、私のデータ分析からしばしば発生します。いくつかの観測から、データの2つのベクトル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.labelsとfy.labelsが同じエンコーディング/意味を持つことを期待しているため、fxとfyの両方で動作するコードが明らかに困難になります。
fx.lables
しかし、fxとfyを「正規化」して、それらが同じレベルになり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)
誰かアイデアはありますか?
別の関連するシナリオは、既存の既知のインデックスがあり、データをこのインデックスに因数分解したいというものです。たとえば、すべてのデータポイントが5つの値[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でそのようなことをすることは可能ですが、面倒です。
ありがとう、トム