Панды: объединить каждый столбец в список через запятую без дубликатов - PullRequest
0 голосов
/ 11 мая 2018

Проблема:

У меня большой CSV-файл, который выглядит примерно так:

A  B   C     D    ...
1  dog black NULL ...
1  dog white NULL ...
1  dog black NULL ...
2  cat red   NULL ...
...

Теперь я хочу "сгруппировать по" столбцу A и объединить каждый оставшийся столбец в список через запятую без дубликатов. Решения должны выглядеть примерно так:

A  B   C             D    ...
1  dog black, white  NULL ...
2  cat red           NULL ...
...

Поскольку имена и номера столбцов в CSV могут изменяться, я предпочитаю решение без жестко закодированных имен.

Используемый подход:

Я попробовал пакет pandas со следующим кодом:

import pandas as pd
data = pd.read_csv("C://input.csv", sep=';')
data = data.where((pd.notnull(data)), None)
data_group = data.groupby(['A']).agg(lambda x: set(x))
data_group.to_csv("C://result.csv", sep=';')

Оператор set делает именно то, что я хочу. Тем не менее, результирующий CSV выглядит так:

A  B       C                   D      ...
1  {'dog'} {'black', 'white'}  {None} ...
2  {'cat'} {'red'}             {None} ...
...

Я не хочу, чтобы {} и '' в моем экспорте, а также столбец D должны были быть пустыми и не содержать слова None.

Вопрос:

Я на правильном пути или есть более элегантный способ достичь своей цели?

1 Ответ

0 голосов
/ 11 мая 2018

join набор с запятой:

df.groupby('A', as_index=False).agg(lambda x: ', '.join(set(x.dropna())))

#   A    B             C D
#0  1  dog  white, black  
#1  2  cat           red  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...