我想合并几个系列中的分类映射,以将该合并重新分配给这些系列作为其分类映射。然而
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.a
和bf.b
共享相同的分类映射。为此,我首先要合并其映射,并用合并的映射替换该系列的原始映射。当all_categories
没有重复项时,该代码有效。
答案 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)