2017-01-03 1 views
2

私はパンダデータフレームdfを持っていますが、これには1つの列colしかありません。 colの値をループし、最初の列の値を使用して値を塗りつぶす列を追加しますcol。たとえば、最初の行は3つの要素['text1','text2','text3']を持つリストです。 3列を追加し、'text1','text2''text3'を使用して値を入力します。pandas dataframe最初の列の値を使用して新しい列と塗りつぶし値を作成します

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  

あなたの助けが理解されるであろう。

答えて

3

単一の列にある値をlist表現形式に変換することによって、新しいデータフレームを構築することができます。 listの要素は、それ自体で別の列エンティティになります。

これらは、その後NoneNaNとして表現されるように取得するには、元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

と連結することができ、あなたは最後の構文の最後に.replace({None:np.NaN})を追加することができます。

+0

は 'DF = pd.DataFrame({ 'COL' 機能しません'、' text2 '、' text3 ']、[' mext1 '、' mext2 ']、[' cext1 ']、[' cext2 ']]}) 'となります。問題: 'np.arange(1、df.shape [0] + 1)'。 –

+0

それを指摘してくれてありがとう。修正しました。 –

3

DataFrameコンストラクタの別のソリューションrenameカラムsおよび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 

str.lenによってカラムcolでリストのmax長さを見つける対処:[ 'テキスト1:

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 
関連する問題