我有一个由一列组成的大型数据框('data')。列中的每一行都由一个字符串组成,每个字符串由逗号分隔的类别组成。我希望对这些数据进行热编码。
例如,
data = {"mesh": ["A, B, C", "C,B", ""]}
由此我想得到一个由以下内容组成的数据框:
index A B. C
0 1 1 1
1 0 1 1
2 0 0 0
我该怎么做?
答案 0 :(得分:9)
请注意,您不是在与OHE打交道。
str.split
+ stack
+ get_dummies
+ sum
df = pd.DataFrame(data)
df
mesh
0 A, B, C
1 C,B
2
(df.mesh.str.split('\s*,\s*', expand=True)
.stack()
.str.get_dummies()
.sum(level=0))
df
A B C
0 1 1 1
1 0 1 1
2 0 0 0
apply
+ value_counts
(df.mesh.str.split(r'\s*,\s*', expand=True)
.apply(pd.Series.value_counts, 1)
.iloc[:, 1:]
.fillna(0, downcast='infer'))
A B C
0 1 1 1
1 0 1 1
2 0 0 0
pd.crosstab
x = df.mesh.str.split('\s*,\s*', expand=True).stack()
pd.crosstab(x.index.get_level_values(0), x.values).iloc[:, 1:]
df
col_0 A B C
row_0
0 1 1 1
1 0 1 1
2 0 0 0
答案 1 :(得分:1)