2017-08-20 7 views
0

私のサンプルdfには、NaNの値を持つ4つの列があります。目標は、NaNの値を除外してすべての行を連結することです。NaNを除くPandasの複数の列を組み合わせる

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'keywords_0':["a", np.nan, "c"], 
       'keywords_1':["d", "e", np.nan], 
       'keywords_2':[np.nan, np.nan, "b"], 
       'keywords_3':["f", np.nan, "g"]}) 

    keywords_0 keywords_1 keywords_2 keywords_3 
0   a   d  NaN   f 
1  NaN   e  NaN  NaN 
2   c  NaN   b   g 

次のことを達成したい:

keywords_0 keywords_1 keywords_2 keywords_3 keywords_all 
0   a   d  NaN   f  a,d,f 
1  NaN   e  NaN  NaN   e 
2   c  NaN   b   g  c,b,g 

は擬似コード:

cols = [df.keywords_0, df.keywords_1, df.keywords_2, df.keywords_3] 

df["keywords_all"] = df["keywords_all"].apply(lambda cols: ",".join(cols), axis=1) 

私は、正確な結果を得るために",".join()を使用することができます知っているが、私は合格するかどうかはわかりませんよ列名を関数に追加します。

答えて

1

axis=1をapplyメソッドに渡すことによって、各行に",".join()を適用できます。最初にNaNを削除する必要があります。それ以外の場合は、TypeErrorを取得します。

df.apply(lambda x: ','.join(x.dropna()), axis=1) 
Out: 
0 a,d,f 
1  e 
2 c,b,g 
dtype: object 

あなたは

df["keywords_all"] = df.apply(lambda x: ','.join(x.dropna()), axis=1) 

それとも、あなたが質問で行ったように列を指定する場合に、元のデータフレームにこのバックを割り当てることができます。

cols = ['keywords_0', 'keywords_1', 'keywords_2', 'keywords_3'] 
df["keywords_all"] = df[cols].apply(lambda x: ','.join(x.dropna()), axis=1) 
+0

を使用して戻って列keywords_allに割り当てる彼はCOLSに '[ 'keywords_0'、 'keywords_1'、 'keywords_2' を変換する必要があります、 'keywords_3'] '右ですか? –

+0

@RayhaneMamaはい、そうです。私は疑似コードを信じましたが、私はより明確にすべきでした。ありがとう。 – ayhan

+0

ありがとうございます。これはすごくうまくいった! – cptpython

0

だけで、別のソリューションを提供to_string

df1[df1.isnull()]='' 
df1.apply(lambda x : x.to_string(index =False,na_rep=False),axis=1).replace({"\n":','},regex=True) 

それからちょうどあなたの最後の命題のために

df['keywords_all']=df1.apply(lambda x : x.to_string(index =False,na_rep=False),axis=1).replace({"\n":','},regex=True) 

または

df.assign(keywords_all=df1.apply(lambda x : x.to_string(index =False,na_rep=False),axis=1).replace({"\n":','},regex=True) 
) 

Out[397]: 
    keywords_0 keywords_1 keywords_2 keywords_3 keywords_all 
0   a   d  NaN   f  a,d,f 
1  NaN   e  NaN  NaN   e 
2   c  NaN   b   g  b,c,g 
関連する問題