2016-01-22 23 views
4

我有一个像这样的熊猫数据框{B中的每一行都是一个字符串,其值与|符号}:Python - 使用拆分将列分成多列

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或理解来完成吗?

回答

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 
+3

谢谢,这个工程。我们也可以使用'pandas.concat([df,df.B.str.get_dummies(sep ='|')],axis = 1)' –

+0

是的,你是对的。谢谢。 – jezrael

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