Наличие двух фреймов данных с одинаковыми именами столбцов (name, dept). Я пытаюсь объединить оба фрейма данных, если есть дубликаты имен и объединить значение dept в столбце dept. Я хочу сохранить одинаковое количество строк в первом фрейме данных, но только добавлю значение второго фрейма данных в первый, если есть дубликат.

До сих пор я пробовал использовать pandas .merge (on = 'name'), а также .groupby ('name') ['dept']. Apply (',' .join), но это удаляет все остальные строки.

Использование слияния показывает только значения с дубликатами. Я хотел бы вернуть неизмененный список с тем же количеством элементов, просто добавив повторяющееся значение в столбец «dept»

Например:

df1 = df2.merge(on='name')

df1.groupby('name')['dept'].apply(', '.join)

df1:
name      dept

bob       sales
billy     support
jill      accounting
hank      paper


df2:
name      dept

bob       support   
ruby      hr
hank      telesales
billy     accounting


final df:
name      dept
bob       sales, support
billy     support, accounting
jill      accounting
hank      paper, telesales

0
Bryan Camacho 29 Окт 2019 в 21:26
2
pd.concat((df1,df2)).groupby('name').dept.apply(', '.join).
 – 
Quang Hoang
29 Окт 2019 в 21:29
Спасибо! Это было именно то!
 – 
Bryan Camacho
29 Окт 2019 в 21:55

1 ответ

Конечно, должен быть более простой способ, но пока ....

Def convert (x):

if type(x) == pd.core.series.Series:

    return ','.join(set(x.values))

else:

    return x

Def merge_them (df1, df2):

temp = pd.concat([df1,df2])

index = pd.Index(set(df1.index)|set(df2.index))

return pd.Series(index.map(lambda x: convert(df3['dept'].loc[x])),
                            index = index)
0
Community 20 Июн 2020 в 12:12