2017-08-11 9 views
1

カテゴリの列と2つのデータフレームを連結するには、最初に欠落しているカテゴリを各列に追加します。理論的にはpandas - 同じカテゴリの列を含む連結がオブジェクトになります

df = pd.DataFrame({"a": pd.Categorical(["foo", "foo", "bar"]), "b": [1, 2, 1]}) 
df2 = pd.DataFrame({"a": pd.Categorical(["baz"]), "b": [1]}) 

df["a"] = df["a"].cat.add_categories("baz") 
df2["a"] = df2["a"].cat.add_categories(["foo", "bar"]) 

両方"a"の列のカテゴリは同じです:

In [35]: pd.concat([df, df2]).info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 4 entries, 0 to 0 
Data columns (total 2 columns): 
a 4 non-null object 
b 4 non-null int64 
dtypes: int64(1), object(1) 
memory usage: 96.0+ bytes 

:2つのデータフレームを連結する際

In [33]: df.a.cat.categories 
Out[33]: Index(['bar', 'foo', 'baz'], dtype='object') 

In [34]: df2.a.cat.categories 
Out[34]: Index(['baz', 'foo', 'bar'], dtype='object') 

しかし、私はobject"a"列を取得しますdocumentationでは、カテゴリが同じ場合はcategoryになります型の列。カテゴリの順序は、カテゴリが順序付けられていなくても重要ですか?私はpandas-0.20.3を使用しています。

答えて

0

はい。 reorder_categoriesを使用すると、カテゴリ自体が順序付けられていなくても、カテゴリの順序を変更できます。

df2["a"] = df2.a.cat.reorder_categories(df.a.cat.categories) 

In [43]: pd.concat([df, df2]).info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 4 entries, 0 to 0 
Data columns (total 2 columns): 
a 4 non-null category 
b 4 non-null int64 
dtypes: category(1), int64(1) 
memory usage: 172.0 bytes 
関連する問題