как объединить данные в датафрейме - PullRequest
0 голосов
/ 03 июля 2018

Я работаю с наборами данных, имеющих записи в CSV-файле как:

 C_id  C_Name        S_Name                Phone
    97  [Bedsheet]     Shree Collection     77422222
    97  [Bedsheet]    Shree Collection      77422222
    105 [Jeans]       Shree Collection      77422222
    61  [Kurti]       F Fashion             9040645
    95  [Lehenga]     Shree Collection      77422222
    61  [Kurti]        F Fashion        9040645
    73  [Cotton Kurti] F Fashion        9040645
    117 [Earring]              Banti        90406459

Я хочу показать данные как:

C_id       C_Name                    S_Name              Phone
97,105,95   Bedsheet,Jeans,Lehenga   Shree Collection    77422222
61,73       Kurti,Cotton Kurti       F Fashion           9040645
117          Earring                 Banti               90406459

Как этого достичь

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете использовать groupby с agg и парой функций str.join. Части, где вам требуется особый уход:

  • Для C_id, поскольку для str.join требуются строки, которые необходимо преобразовать из int в str.
  • Для C_Name у вас есть ряд списков. itertools.chain - эффективный способ свести эти списки в итерацию без вложенности.

Вот рабочий пример:

from itertools import chain

agg_funcs = {'C_id': lambda x: ','.join(map(str, x)),
             'C_Name': lambda x: ','.join(chain.from_iterable(x))}

res = df.groupby(['S_Name', 'Phone']).agg(agg_funcs).reset_index()

print(res)

             S_Name     Phone          C_id                           C_Name
0             Banti  90406459           117                          Earring
1         F Fashion   9040645      61,61,73         Kurti,Kurti,Cotton Kurti
2  Shree Collection  77422222  97,97,105,95  Bedsheet,Bedsheet,Jeans,Lehenga
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...