Python - 使用Split将列分成多个列

时间:2016-01-22 09:11:24

标签: python pandas

我有一个像这样的Pandas数据帧{B中的每一行都是一个字符串,其值与|连接符号}:

A B
a 1|2|3
b 2|4|5
c 3|2|5

我想创建一些列,表示该行(B列)中存在该值:

A B     1 2 3 4 5
a 1|2|3 1 1 1 0 0
b 2|4|5 0 1 0 1 1
c 3|5   0 0 1 0 1

我通过循环列来尝试这个。但是,可以使用lambda或comprehension来完成吗?

2 个答案:

答案 0 :(得分:4)

您可以尝试get_dummies

print df
   A      B
0  a  1|2|3
1  b  2|4|5
2  c  3|2|5

print df.B.str.get_dummies(sep='|')
   1  2  3  4  5
0  1  1  1  0  0
1  0  1  0  1  1
2  0  1  1  0  1

如果您需要旧列B,请使用join

print df.join(df.B.str.get_dummies(sep='|'))
   A      B  1  2  3  4  5
0  a  1|2|3  1  1  1  0  0
1  b  2|4|5  0  1  0  1  1
2  c  3|2|5  0  1  1  0  1

答案 1 :(得分:1)

希望这有帮助。

In [19]: df
Out[19]: 
   A      B
0  a  1|2|3
1  b  2|4|5
2  c  3|2|5

In [20]: op = df.merge(df.B.apply(lambda s: pd.Series(dict((col, 1)  for col in s.split('|')))), 
left_index=True, right_index=True).fillna(0)

In [21]: op
Out[21]: 
   A      B  1  2  3  4  5
0  a  1|2|3  1  1  1  0  0
1  b  2|4|5  0  1  0  1  1
2  c  3|2|5  0  1  1  0  1