Объединить строки в датафрейме
Ранее я задавал вопрос похожий вопрос, вот ссылка: ссылка, но не учёл что может встретится следующий прикол.
Пересматривая датафрейм, я наткнулся на такую штуку:
Номертижня Деньтижня Пара 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