我有一个数据框:
df =
A B C D E
--- --- --- --- ---
0 J969 I279 D65 -1 -1
1 C56 A419 I279 C221 -1
2 R068 D65 N009 -1 -1
3 C56 T107 J969 R068 N009
我需要能够对所有列中的标签进行编码。如果标签与数据帧中任何位置的另一个标签(例如,列A行0和列C行3)匹配,则它们必须编码为相同的数字。就这样:
A B C D E
--- --- --- --- ---
0 0 3 7 -1 -1
1 1 2 6 15 -1
2 4 7 10 -1 -1
3 1 8 0 4 10
我在stackoverflow上的示例中尝试了pandas.factorize
,pandas.Categorize
,Scikit-learn LabelEncoder
,但似乎没有任何效果。
感谢。
答案 0 :(得分:0)
您可以使用:
m = {d: i for i, d in enumerate(pd.unique(df.as_matrix().flatten()))}
new_df = pd.DataFrame({c: df[c].map(m) for c in df.columns})
m
是一个映射,根据一些任意顺序将DataFrame中的唯一元素映射到索引。