У меня есть следующий фрейм данных:
df=pd.DataFrame({'code1':["A","B","A"],"code2":["k","l","k"],'Names':[['EUGENIO NETO','JUAN MATIAS SERAGOPIAN'],['EUGENIO LUPORINI NETO'],['SIMONE FANKHAUSER','ALEX SOUZA']]})
code1 code2 Names
0 A k [EUGENIO NETO, JUAN MATIAS SERAGOPIAN]
1 B l [EUGENIO LUPORINI NETO]
2 A k [SIMONE FANKHAUSER, ALEX SOUZA]
Я хочу сгруппировать по code1
и code2
и объединить списки в Names
. В некотором смысле это выглядит так:
code1 code2 Names
0 A k [EUGENIO NETO, JUAN MATIAS SERAGOPIAN, SIMONE FANKHAUSER, ALEX SOUZA]
1 B l [EUGENIO LUPORINI NETO]
Уже проверены следующие ответы:
Группировать и добавлять списки и строки
pandas списки группировки и объединения
Итак, я попытался адаптировать ответы на эти вопросы к моему случаю (но не смог решить):
df['Names']=df[['code1','code2',"Names"]].groupby(['code1','code2'])["Names"].agg('sum')
----> ValueError: Function does not reduce
df['Names']=df[['code1','code2',"Names"]].groupby(['code1','code2'])["Names"].agg('Names')
----> AttributeError: 'SeriesGroupBy' object has no attribute 'Names'
df['Names']=df[['code1','code2',"Names"]].groupby(['code1','code2'])["Names"].transform(lambda x: append(x))
----> NameError: name 'append' is not defined
Я что-то упустил или это неправильно?
EDIT
Андрей и NY C Coder действительно предложили функциональные решения. Но когда я запустил это в большем наборе данных, я получил то же ValueError: Function does not reduce
. Исследовал, что это могло быть, и нашел здесь этот вопрос: Pandas Функция группового аггирования не уменьшает
В выбранном ответе предлагается использовать кортежи, поскольку списки проблематичны c. Другой ответ объясняет, где это происходит в коде pandas. Кортежи были бы лучшим способом? Как применить это здесь?