简体   繁体   English

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

[英]Python - Divide the column into multiple columns using Split

I have a Pandas dataframe like this {each row in B is a string with values joined with | 我有一个像这样的Pandas数据帧{B中的每一行都是一个字符串,其值与|连接 symbol}: 符号}:

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

I want to create columns which say that the value is present in that row(of column B) or not: 我想创建一些列,表示该行(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

I have tried this by looping the columns. 我通过循环列来尝试这个。 But, can it be done using lambda or comprehensions? 但是,可以使用lambda或comprehension完成吗?

You can try get_dummies : 你可以试试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

And if you need old column B use join : 如果你需要旧的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

Hope this helps. 希望这可以帮助。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM