使用pandas assign将列表列扩展为多个列

时间:2018-01-21 23:57:19

标签: pandas

我有这个数据框:

test = pd.DataFrame([{'a': 'b,c,d'},{'a': 'c,d'},{'a': 'd,c,d'}])
test

    a 
0   b,c,d 
1   c,d 
2   d,c,d 

我想扩展专栏' a'分为三个不同的新栏目。

我知道如何使用此命令执行此操作:

test[['Column1', 'Column2','Column3']] = test['a'].str.split(',', expand=True)

    a   Column1     Column2     Column3
0   b,c,d   b   c   d
1   c,d     c   d   None
2   d,c,d   d   c   d

但是,我对使用pandas.assign函数的解决方案感兴趣。

我尝试了这个,但我只恢复了第一列。

test = test.assign(a = lambda x: x['a'].str.split(',', expand = True))

test

    a
0   b
1   c
2   d

我该怎么做?

2 个答案:

答案 0 :(得分:1)

如果您确实想使用assign

test.assign(**{str(k): v for k,v in (test['a'].str.split(',', expand=True).to_dict('l')).items()})
Out[898]: 
       a  0  1     2
0  b,c,d  b  c     d
1    c,d  c  d  None
2  d,c,d  d  c     d

答案 1 :(得分:0)

如果你必须使用assign,你可以这样做:

    df.assign(**dict(zip(['Column1','Column2','Column3'],
                         df.a.str.split(',',expand=True).values.T)))
Out[19]: 
       a Column1 Column2 Column3
0  b,c,d       b       c       d
1    c,d       c       d    None
2  d,c,d       d       c       d