2016-01-22 25 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