Панды объединяют значения столбцов в ячейки строки по типу - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть этот фрейм данных

ID  type    name    number  description comments
1   short   A       2       XX          xxx
1   short   B                               
1   short   C       4       YY          yyy
1   full    A/B/C
2   short   E       
2   short   F       9       ZZ          zzz                     
2   short   G       7       WW          www
2   short   H       
2   full    E/F/G/H 

И я хочу преобразовать его в свертывание в type full строках значений столбцов number, description и comments (если они существуют) в type short строках

id  type    name    number  description comments
1   full    A/B/C   2/4     XX/YY       xxx/yyy
2   full    E/F/G/H 9/7     ZZ/WW       zzz/www

Я пробовал использовать функции агрегирования и группирования, но безуспешно.

Не могли бы вы помочь мне?

Заранее спасибо!

1 Ответ

0 голосов
/ 25 апреля 2019

Вы можете создать динамический словарь с помощью dict.fromkeys с лямбда-функцией для всех столбцов без id и ключей из словаря d1 и перейти к GroupBy.agg:

f = lambda x: '/'.join(x.dropna().astype(str))

d1 = {'type':'last', 'name':'last'}
d2 = dict.fromkeys(df.columns.difference(['id'] + list(d1.keys())), f)
d = {**d1, **d2}    

df = df.groupby('id', sort=False, as_index=False).agg(d)
print (df)
   id  type     name comments description   number
0   1  full    A/B/C  xxx/yyy       XX/YY  2.0/4.0
1   2  full  E/F/G/H  zzz/www       ZZ/WW  9.0/7.0

При необходимости обрабатывает значения в лямбда-функции по типам - например, сумма числовых и объединение нечисловыми столбцами:

f = lambda x: x.sum() if np.issubdtype(x.dtype, np.number) else '/'.join(x.dropna())

d1 = {'type':'last', 'name':'last'}
d2 = dict.fromkeys(df.columns.difference(['id'] + list(d1.keys())), f)
d = {**d1, **d2}           
df = df.groupby('id', sort=False, as_index=False).agg(d)
print (df)
   id  type     name comments description  number
0   1  full    A/B/C  xxx/yyy       XX/YY     6.0
1   2  full  E/F/G/H  zzz/www       ZZ/WW    16.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...