pandas dataframe使用第一列的值创建新列和填充值

时间:2017-01-03 09:26:59

标签: python pandas

我有一个pandas数据框df,它只有一列col。我想循环col的值,并使用第一列col的值添加列以填充值。例如,第一行是一个列表,其中包含3个元素['text1','text2','text3']。我想添加3列,并使用'text1''text2''text3'填充值。

import pandas as pd

df=pd.DataFrame({'col':[['text1','text2','text3'],['mext1','mext2'],['cext1']]})
df

    col
0   [text1, text2, text3]
1   [mext1, mext2]
2   [cext1]

我想这样:

    col                     col_1     col_2     col_3
0   [text1, text2, text3]   text1     text2     text3
1   [mext1, mext2]          mext1     mext2     Nan
2   [cext1]                 cext1     Nan       Nan    

我们将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以通过将单列中存在的值转换为其list表示形式来构建新的数据框。 list的元素现在将成为单独的列实体。

然后可以将这些与原始DF列式axis=1)连接起来。

df_expand = pd.DataFrame(df['col'].tolist(), df.index)
df_expand.columns = df_expand.columns + 1
pd.concat([df['col'], df_expand.add_prefix('col_')], axis=1)

enter image description here

要将None表示为NaN,您可以在最后一种语法的末尾添加.replace({None:np.NaN})

答案 1 :(得分:3)

使用DataFrame构造函数的另一个解决方案,其中需要rename列和add_prefix

print (pd.DataFrame(df.col.values.tolist(), index=df.col)
         .rename(columns = lambda x: x+1)
         .add_prefix('col_')
         .reset_index())

                     col  col_1  col_2  col_3
0  [text1, text2, text3]  text1  text2  text3
1         [mext1, mext2]  mext1  mext2   None
2                [cext1]  cext1   None   None

通过maxcol列中查找str.len列表长度的解决方案:

cols = df.col.str.len().max() + 1
print (cols)
4
print (pd.DataFrame(df.col.values.tolist(), index=df.col,columns = np.arange(1, cols))
         .add_prefix('col_')
         .reset_index())
                     col  col_1  col_2  col_3
0  [text1, text2, text3]  text1  text2  text3
1         [mext1, mext2]  mext1  mext2   None
2                [cext1]  cext1   None   None