Объединить несколько строк в одну строку в Pandas Dataframe - PullRequest
2 голосов
/ 26 февраля 2020

У меня здесь есть детский стол. Вот пример данных.

+----+------+----------+----------------+--------+---------+
| ID | Name |   City   |     Email      | Phone  | Country |
+----+------+----------+----------------+--------+---------+
|  1 | Ted  | Chicago  | abc@gmail.com  | 132321 | USA     |
|  1 | Josh | Richmond | abc@gmail.com  | 435324 | USA     |
|  2 | John | Seattle  | 123@gmail.com  | 322421 | USA     |
|  2 | John | Berkley  | 4723@gmail.com | 322421 | USA     |
|  2 | Mike | Seattle  | 4723@gmail.com | 322421 | USA     |
+----+------+----------+----------------+--------+---------+

Строки выше должны быть добавлены вместе. Требуются только уникальные значения.

+----+---------------+----------------------+----------------------------------+-------------------+---------+
| ID |     Name      |         City         |              Email               |       Phone       | Country |
+----+---------------+----------------------+----------------------------------+-------------------+---------+
|  1 | 'Ted','Josh'  | 'Chicago','Richmond' | 'abc@gmail.com'                  | '132321','435324' | 'USA'   |
|  2 | 'John','Mike' | 'Seattle','Berkley'  | '123@gmail.com','4723@gmail.com' | '322421'          | 'USA'   |
+----+---------------+----------------------+----------------------------------+-------------------+---------+

1 Ответ

4 голосов
/ 26 февраля 2020

Используйте, если важен порядок GroupBy.agg с функцией лямбды и удалите дубликаты dictionary:

df1=df.groupby('ID').agg(lambda x: ','.join(dict.fromkeys(x.astype(str)).keys())).reset_index()

#another alternative, but slow if large data
#df = df.groupby('ID').agg(lambda x: ','.join(x.astype(str).unique())).reset_index()
print (df1)
   ID       Name              City                         Email  \
0   1   Ted,Josh  Chicago,Richmond                 abc@gmail.com   
1   2  John,Mike   Seattle,Berkley  123@gmail.com,4723@gmail.com   

           Phone Country  
0  132321,435324     USA  
1         322421     USA  

Если порядок не важен, используйте аналогичное решение с удаленными дубликатами set с:

df2 = df.groupby('ID').agg(lambda x: ','.join(set(x.astype(str)))).reset_index()
print (df2)
   ID       Name              City                         Email  \
0   1   Josh,Ted  Richmond,Chicago                 abc@gmail.com   
1   2  John,Mike   Berkley,Seattle  4723@gmail.com,123@gmail.com   

           Phone Country  
0  435324,132321     USA  
1         322421     USA  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...