Сейчас покажу то, что стопудово вы будете часто использовать!
Когда нужно собрать в кучу разрозненные текстовые значения для каждой группы из одной колонки. Например:
☑️Собрать все платформы, на которых работал рекламный аккаунт
☑️Объединить теги товаров из одной категории
☑️Соединить комментарии пользователей
Вот 3 способа как это сделать.
Допустим, у нас есть DataFrame с рекламными расходами:
import pandas as pd
data = { 'account_id': [100, 100, 100, 200, 200, 300, 300, 300, 400, 500],
'platform': ['yandex', 'telegram', 'vk', 'yandex', 'telegram',
'vk', 'yandex', 'telegram', 'yandex', 'vk'],
'amount': [600, 300, 200, 1500, 800, 1200, 600, 400, 900, 750]
}
df = pd.DataFrame(data)
1️⃣groupby + lambda + join 💡
df_grouped = df.groupby('account_id',as_index=False)['platform'].apply(lambda x: ', '.join(x))lambda x: ... - это анонимная функция. Можно читать как: "Для каждого x (где x — это группа платформ) выполнить join"
Не забываем именно в groupby добавлять as_index=False, а не потом .reset_index(), так как это оптимальнее. Ну и к тому же раз уж в функции groupby есть такой способ, то им надо пользоваться.
2️⃣agg() с join 🔄
df_grouped2 = df.groupby('account_id',as_index=False).agg({'platform': lambda x: ', '.join(x)})А если обернуть x в set(x), то можно убрать дубликаты если они там есть: df.groupby('account_id',as_index=False).agg({'platform':lambda x:','.join(set(x))})
3️⃣Краткая запись ⚡️
df_grouped3 = df.groupby('account_id',as_index=False)['platform'].apply(', '.join)Короче, это реально удобно! Вместо нескольких строк с одним account_id получаем одну строку и видим все платформы аккаунта сразу.
А какой способ используете вы? Делитесь ⬇️
