合并分类:如何处理重复项

时间:2018-11-26 18:02:44

标签: python pandas duplicates union categorical-data

我想合并几个系列中的分类映射,以将该合并重新分配给这些系列作为其分类映射。然而 pd.api.types.union_categoricals不会合并传递给它的分类的重复元素。您应该如何合并类别 whiltst 合并重复项?

请考虑以下代码段:

import pandas as pd

ac = pd.Categorical(['a1','a2', 'b1'])
bc = pd.Categorical(['b1','b2', 'a1'])

af = pd.DataFrame(pd.Series(ac, dtype="category", name='a'))
bf = pd.DataFrame(pd.Series(bc, dtype="category", name='b'))

all_categories = pd.api.types.union_categoricals([ac, bc])

print(all_categories)

af.a = af.a.cat.set_categories(all_categories)
bf.b = bf.b.cat.set_categories(all_categories)

df = af.join(bf)

对于打印语句,我得到

[a1, a2, b1, b1, b2, a1]
Categories (4, object): [a1, a2, b1, b2]

af.a = af.a.cat.set_categories(all_categories)行  给我错误ValueError: Categorical categories must be unique

好...如果联合会违反直觉地不执行合并重复项的实际集合式联合,那我应该怎么做呢?

重申:我打算af.abf.b共享相同的分类映射。为此,我首先要合并其映射,并用合并的映射替换该系列的原始映射。当all_categories没有重复项时,该代码有效。

1 个答案:

答案 0 :(得分:0)

以下方法可以工作,但是感觉像是一种解决方法,而且不太优雅:

import pandas as pd

ac = pd.Categorical(['a1','a2', 'b1'])
bc = pd.Categorical(['b1','b2', 'a1'])

af = pd.DataFrame(pd.Series(ac, dtype="category", name='a'))
bf = pd.DataFrame(pd.Series(bc, dtype="category", name='b'))

all_categories = pd.Series(pd.api.types.union_categoricals([ac, bc]))
all_categories.drop_duplicates()

af.a = af.a.cat.set_categories(all_categories.cat.categories)
bf.b = bf.b.cat.set_categories(all_categories.cat.categories)