Pandas DataFrame:将CSV列传播到多列

时间:2018-10-24 15:55:42

标签: python pandas

我有一个熊猫DataFrame

>>> import pandas as pd
>>> df = pd.DataFrame([['a', 2, 3], ['a,b', 5, 6], ['c', 8, 9]])
     0  1  2
0    a  2  3
1  a,b  5  6
2    c  8  9

我想将第一列扩展到n列(其中n是唯一的,用逗号分隔的值的数量,在这种情况下为3)。如果存在该值,则每个结果列应为1,否则为0。预期结果是:

   1  2  a  c  b
0  2  3  1  0  0
1  5  6  1  0  1
2  8  9  0  1  0

我想出了以下代码,但对我来说似乎有点circuit回。

>>> import re
>>> dfSpread = pd.get_dummies(df[0].str.split(',', expand=True)).\
        rename(columns=lambda x: re.sub('.*_','',x))
>>> pd.concat([df.iloc[:,1:], dfSpread], axis = 1)

是否有一个内置函数可以执行我找不到的功能?

2 个答案:

答案 0 :(得分:4)

使用get_dummies

df.set_index([1,2])[0].str.get_dummies(',').reset_index()
Out[229]: 
   1  2  a  b  c
0  2  3  1  0  0
1  5  6  1  1  0
2  8  9  0  0  1

答案 1 :(得分:2)

您可以在此处使用pop + concat作为Wen答案的替代版本。

pd.concat([df, df.pop(df.columns[0]).str.get_dummies(sep=',')], axis=1)

   1  2  a  b  c
0  2  3  1  0  0
1  5  6  1  1  0
2  8  9  0  0  1