агрегировать / сжимать данные с разделенными запятыми значениями для ключа, используя python - PullRequest
1 голос
/ 14 мая 2019

У меня есть данные, которые выглядят так:

user    document     score
 A         ABC        .98
 A         BCD        .91
 A         CDE        .90
 B         ABC        .68
 B         XYZ        .60

и так далее. Я хочу сжать / агрегировать это до:

 user         document                 score
  A       'ABC','BCD','CDE'     '.98','0.91','0.90'
  B       'ABC','XYZ'           '.68','.60'

и т. Д.

Я знаю, как сделать это столбец за столбцом, используя эту формулу:

(df['document'].str.split(', ')
                .groupby(df['user'])
                .agg(lambda x: ', '.join(set(y for z in x for y in z)))
                .reset_index())

но если я попытаюсь сделать это для обоих столбцов, это покажет мне ошибку. Как мне это сделать? Пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Редактировать :
Обернуть их в дополнительные кавычки

df.astype(str).groupby('user').agg(lambda x: "'{0}'".format("','".join(x)))

Out[1363]:
               document                score
user
A     'ABC','BCD','CDE'  '0.98','0.91','0.9'
B           'ABC','XYZ'         '0.68','0.6'

Оригинал

Попробуйте это:

df.astype(str).groupby('user').agg(','.join)
0 голосов
/ 14 мая 2019

Вы можете использовать replace() с регулярными выражениями и str.cat() методы:

df.groupby('user').agg(lambda x: x.astype(str).replace(r'(.*)', r"'\1'", regex=True).str.cat(sep = ', '))

Результат:

                 document                  score
user                                            
A     'ABC', 'BCD', 'CDE'  '0.98', '0.91', '0.9'
B            'ABC', 'XYZ'          '0.68', '0.6'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...