scu*_*nex 5 python dataframe pandas
我有一个由一列组成的大型数据帧('数据').列中的每一行都由一个字符串组成,每个字符串由逗号分隔的类别组成.我希望对这些数据进行热编码.
例如,
data = {"mesh": ["A, B, C", "C,B", ""]}
Run Code Online (Sandbox Code Playgroud)
从这里我想得到一个包含以下内容的数据框:
index A B. C
0 1 1 1
1 0 1 1
2 0 0 0
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
cs9*_*s95 12
请注意,您不是在与OHE打交道.
str.split+ stack+ get_dummies+sumdf = 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
pd.crosstabx = 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
Run Code Online (Sandbox Code Playgroud)
小智 6
想有一个更简单的答案,或者我觉得这与我们必须进行的多项操作相比更简单。
确保该列具有以逗号分隔的唯一值
在内置参数中使用 get dummies 将分隔符指定为逗号。对此的默认设置是管道分隔。
data = {"mesh": ["A, B, C", "C,B", ""]}
sof_df=pd.DataFrame(data)
sof_df.mesh=sof_df.mesh.str.replace(' ','')
sof_df.mesh.str.get_dummies(sep=',')
Run Code Online (Sandbox Code Playgroud) A B C
0 1 1 1
1 0 1 1
2 0 0 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1753 次 |
| 最近记录: |