Панды объединяют столбцы, чтобы создать новый столбец со значениями, разделенными запятыми - PullRequest
0 голосов
/ 02 января 2019

Мой фрейм данных имеет четыре столбца с цветами.Я хочу объединить их в один столбец под названием «Цвета» и использовать запятые для разделения значений.

Например, я пытаюсь объединить столбец «Цвета» следующим образом:

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)

Но вывод для идентификатора 120:, красный, зеленый

А вывод для идентификатора 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)

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Использование 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]
0 голосов
/ 02 января 2019

Вам просто нужно обращаться с NaNs

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
...