Объединяйте ячейки без потери информации в Pandas - PullRequest
1 голос
/ 04 октября 2019

Я пишу программу, которая может собирать информацию об альбомах из музыкальной базы данных Discogs. Скребок работает отлично.

Теперь у меня есть фрейм данных с множеством дублированных исполнителей и названий, в которых отличается только ячейка форматов (см., Например, «Sido», «Ich und keine Maske» в фрагменте моегорамка данных ниже).

    Interpret                    Title                              Formats
0   Afrika Bambaataa And Family  The Decade Of Darkness 1990-2000   CD, Album, RE
1   Sha Hef                      Out The Mud
2   Sido                         Ich Und Keine Maske                CD, Album
3   Sido                         Ich Und Keine Maske                2xLP, Album
...

Теперь я ищу способ объединить эти двойные записи без потери информации. Может кто-нибудь дать мне подсказку? Окончательный результат должен выглядеть следующим образом:

    Interpret                    Title                              Formats
0   Afrika Bambaataa And Family  The Decade Of Darkness 1990-2000   CD, Album, RE
1   Sha Hef                      Out The Mud
2   Sido                         Ich Und Keine Maske                CD, Album, 2xLP
...

Я пытался

r = dataframe.groupby('Interpret')['Formate'].apply(','.join)

, но в результате получился ряд Панд с удаленным столбцом заголовка, поэтому я потерял информацию.

1 Ответ

1 голос
/ 04 октября 2019

вы пробовали

import pandas as pd
df = pd.DataFrame({'Interpret': ['Afrika Bambaataa And Family', 'Sha Hef', 'Sido', 'Sido'],
                   'Title': ['The Decade Of Darkness 1990-2000', 'Out The Mud', 'Ich Und Keine Maske', 'Ich Und Keine Maske'],                             
                   'Formats': ['CD, Album, RE', 'CD, Album', 'CD, Album', '2xLP, Album']})

# remove duplicate interprets and merge formats...
df1 = df.groupby('Interpret').agg(lambda x: ', '.join(x.unique())).reset_index()

# now to get rid of duplicate entries in 'Formats' column...
def drop_dupes(row):
    l = row.split(', ')
    return ', '.join(list(set(l)))

df1['Formats'] = df1['Formats'].apply(drop_dupes)

? Это дает вам

Out[40]: 
                     Interpret  ...          Formats
0  Afrika Bambaataa And Family  ...    CD, RE, Album
1                      Sha Hef  ...        CD, Album
2                         Sido  ...  CD, Album, 2xLP

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...