我在Pandas DataFrame中有一个字符串列,带有一些逗号分隔的标签。
例如:
Row 1: "A, G, Z"
Row 2: "H"
Row 3: "A, H"
我需要为每个名为A,B,C,D的标签创建一列。如果在标签字符串中有带有列名(A,B,...)的标签,则在相应的行/列中具有1。否则,将添加的列值设置为0。
因此,例如在上面的示例中,我需要添加以下列/值:
A, G, H, Z
Row 1: 1, 1, 0, 1
Row 2: 0, 0, 1, 0
Row 3: 1, 0, 1, 0
我曾考虑过遍历行,但是在一些地方读到它会影响性能。
我想知道您是否可以在不进行行迭代或不以性能优化方式利用迭代的情况下提供帮助...
答案 0 :(得分:0)
是的,pandas.Series.str
确实为此提供了一种方法:
# replace `col` with your column name
dummies = df['col'].str.get_dummies(sep=',')
# assign generated columns to data frame
df[dummies.columns] = dummies
我注意到您给出的示例中可能存在空格问题,这是删除空格然后生成列的解决方案:
# replace `col` with your column name
df['col'].str.replace(' ', '').str.get_dummies(sep=',')
链接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.get_dummies.html