爆炸 pandas 数据框列

ult*_*ron 4 python string text dataframe pandas

我有一个 Pandas 数据框,看起来像这样:

text = ["abcd", "efgh", "ijkl", "mnop", "qrst", "uvwx", "yz"]

labels = ["label_1, label_2", 
          "label_1, label_3, label_2", 
          "label_2, label_4", 
          "label_1, label_2, label_5", 
          "label_2, label_3", 
          "label_3, label_5, label_1, label_2", 
          "label_1, label_3"]

df = pd.DataFrame(dict(text=text, labels=labels))
df



   text                              labels
0  abcd                    label_1, label_2
1  efgh           label_1, label_3, label_2
2  ijkl                    label_2, label_4
3  mnop           label_1, label_2, label_5
4  qrst                    label_2, label_3
5  uvwx  label_3, label_5, label_1, label_2
6    yz                    label_1, label_3
Run Code Online (Sandbox Code Playgroud)

我想将数据框格式化为如下所示:

text  label_1  label_2  label_3  label_4  label_5

abcd        1.0      1.0      0.0      0.0      0.0
efgh        1.0      1.0      1.0      0.0      0.0
ijkl        0.0      1.0      0.0      1.0      0.0
mnop        1.0      1.0      0.0      0.0      1.0
qrst        0.0      1.0      1.0      0.0      0.0
uvwx        1.0      1.0      1.0      0.0      1.0
yz          1.0      0.0      1.0      0.0      0.0
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?(我知道我可以通过执行类似的操作来拆分标签中的字符串并将它们转换为列表df.labels.str.split(","),但不确定如何从那里继续。

(所以基本上我想将标签列中的这些关键字转换为自己的列,并在它们出现如预期输出中所示时填写 1)

jpp*_*jpp 5

您可以使用pd.Series.str.get_dummies并与该text系列结合使用:

dummies = df['labels'].str.replace(' ', '').str.get_dummies(',')
res = df['text'].to_frame().join(dummies)

print(res)

   text  label_1  label_2  label_3  label_4  label_5
0  abcd        1        1        0        0        0
1  efgh        1        1        1        0        0
2  ijkl        0        1        0        1        0
3  mnop        1        1        0        0        1
4  qrst        0        1        1        0        0
5  uvwx        1        1        1        0        1
6    yz        1        0        1        0        0
Run Code Online (Sandbox Code Playgroud)