web-dev-qa-db-ja.com

pandas列をマージして、カンマ区切り値で新しい列を作成します

データフレームには、色付きの4つの列があります。それらを「色」と呼ばれる1つの列に結合し、コンマを使用して値を区切ります。

たとえば、私はこのように色の列に結合しようとしています:

ID  Black Red  Blue  Green  Colors   
120 NaN   red  NaN   green  red, green  
121 black Nan  blue  NaN    black, blue

私のコードは:

df['Colors'] = df[['Black, 'Red', 'Blue', 'Green']].apply(lambda x: ', '.join(x), axis=1)

しかし、ID 120の出力は次のとおりです:、赤、、緑

そして、ID 121の出力は、黒、青、

私の問題を見つけてください!コードの前半で、「None」をNaNの代わりに「」に置き換えました。変更を加え、さらに[x.notnull()]を挿入するフィードバックを組み込むと、機能します!

df['Black'].replace('None', np.nan, inplace=True)
df['Colors'] = df[['Black, 'Red', 'Blue', 'Green']].apply(lambda x: ', '.join(x[x.notnull()]), axis=1)
8
KRDavis

NaNを処理する必要があるだけです

df['Colors'] = df[['Black', 'Red', 'Blue', 'Green']].apply(lambda x: ', '.join(x[x.notnull()]), axis = 1)

    ID      Black   Red Blue    Green   Colors
0   120     NaN     red NaN     green   red, green
1   121     black   NaN blue    NaN     black, blue
5
Vaishali

dotの使用

s=df.iloc[:,1:]
s.notnull()
   Black   Red   Blue  Green
0  False  True  False   True
1   True  True   True  False
s.notnull().dot(s.columns+',').str[:-1]
0         Red,Green
1    Black,Red,Blue
dtype: object

df['color']=s.notnull().dot(s.columns+',').str[:-1]
1
YOBEN_S