Объединить строки в датафрейме

Ранее я задавал вопрос похожий вопрос, вот ссылка: ссылка, но не учёл что может встретится следующий прикол.

Пересматривая датафрейм, я наткнулся на такую штуку:

    Номертижня      Деньтижня     Пара      1 група
    Перший тиждень    П'ятниця      1       Лб1 Практичний курс"Бізнес-симуляція"
                                              вул.Чигоріна,57-а .
                                    2       Лб1 Практичний курс"Бізнес-симуляція"
                                              вул.Чигоріна,57-а .
                                    3       Лб2 Безпека ІнфСист та мереж 
                                            Б-520   доц. yyyy .
                                            Лб1 Безпека ІнфСист та мереж
                                            Б-514   проф. xxxx.

Это деление груп на подгруппы, такое деление встречается не всегда, оно может быть, а может и не быть вообще. Можно ли как-то это сделать таким образом:

    Номертижня      Деньтижня     Пара      1 група
    Перший тиждень    П'ятниця      1       Лб1 Практичний курс"Бізнес-симуляція" вул.Чигоріна,57-а                 
                                    2       Лб1 Практичний курс"Бізнес-симуляція" вул.Чигоріна,57-а .        
                                    3       Лб2 Безпека ІнфСист та мереж Б-520 доц. yyyy. / Лб1 Безпека ІнфСист та мереж Б-514   проф. xxxx.
                                    
                                    
                                    


Ответы (1 шт):

Автор решения: strawdog

Думаю, в этом случае вам подойдет обычная группировка. При df:

     x    y  z
0    1  1.0  a
1    2  2.0  d
2  NaN  NaN  e
3  NaN  2.0  f
4    3  3.0  g
5  NaN  NaN  h
6  NaN  3.0  j

группируем:

res = df.fillna(method = 'ffill')
res = res.groupby(['x', 'y'])['z'].apply(lambda x: '/'.join(x)).reset_index()

UPDATE

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

df[['x', 'y']] = df[['x', 'y']].fillna(method = 'ffill')
res = df.groupby(['x', 'y'])['z'].apply(lambda x: '/'.join(x)).reset_index()

получаем res:

   x    y      z
0  1  1.0      a
1  2  2.0  d/e/f
2  3  3.0  g/h/j​
→ Ссылка