Python 将逗号分隔字符串的DataFrame列转换为一个热编码字符串

Python 将逗号分隔字符串的DataFrame列转换为一个热编码字符串,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个由一列组成的大数据框(“数据”)。列中的每一行由一个字符串组成,每个字符串由逗号分隔的类别组成。我希望对这些数据进行热编码 比如说, data = {"mesh": ["A, B, C", "C,B", ""]} 由此,我希望得到一个数据帧,包括: index A B. C 0 1 1 1 1 0 1 1 2 0 0 0 我怎样才能做到

我有一个由一列组成的大数据框(“数据”)。列中的每一行由一个字符串组成,每个字符串由逗号分隔的类别组成。我希望对这些数据进行热编码

比如说,

data = {"mesh": ["A, B, C", "C,B", ""]}
由此,我希望得到一个数据帧,包括:

index      A       B.     C
0          1       1      1
1          0       1      1
2          0       0      0

我怎样才能做到这一点?

请注意,您不是在处理职业健康安全问题

str.split
+
stack
+
get\u dummies
+
sum

应用
+
值\u计数

pd.交叉表

我想有一个更简单的答案,或者我觉得这比我们必须进行的多个操作更简单

  • 确保列具有唯一的值,并用逗号分隔

  • 使用get dummies in BUILD参数将分隔符指定为逗号。此选项的默认值为“管道分隔”

    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=',')
    
  • 输出:
    \
    行连续字符和缩进-我的眼睛!你很快就能发布选项,真的很不错。现在这是
    piR-esque
    @JonClements-fixed…:P
    (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
    
    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
    
    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=',')
    
        A   B   C
    0   1   1   1
    1   0   1   1
    2   0   0   0