Python: разбить несколько строк строки на отдельные (отдельные) строки - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть датафрейм, содержащий названия компаний и людей.Например, в той же строке в первом столбце у меня есть название компании, а во втором столбце - имена людей, которые являются частью компании (каждая строка - это имя).И количество людей варьируется для каждой компании, и у меня более 100 компаний.

Это пример набора данных:

Company name                DM Full name

LA CAMPAGNOLA SA            Mr Victor Daniel Martin
                            Mr Fernando Luis Falco
                            Mr Gustavo Pablo Macchi
                            Mr Marcelo Dario Siano
INVERSORA ELECTRICA S.A.    Mr Luis Pablo Rogelio Pagano
                            Mr Damian Eduardo Sanfilippo
                            Mr Sebastian Cordova Moyano
                            Ms Sylvina Gabriela Sanchez
                            Mr Luis Rodolfo Secco
                            Mr Jaime Javier Barba

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

Company name                DM Full name

LA CAMPAGNOLA SA            Victor Daniel Martin
LA CAMPAGNOLA SA            Fernando Luis Falco
LA CAMPAGNOLA SA            Gustavo Pablo Macchi
LA CAMPAGNOLA SA            Marcelo Dario Siano
INVERSORA ELECTRICA S.A.    Luis Pablo Rogelio Pagano
INVERSORA ELECTRICA S.A.    Damian Eduardo Sanfilippo
INVERSORA ELECTRICA S.A.    Sebastian Cordova Moyano
INVERSORA ELECTRICA S.A.    Sylvina Gabriela Sanchez
INVERSORA ELECTRICA S.A.    Luis Rodolfo Secco
INVERSORA ELECTRICA S.A.    Jaime Javier Barba

Я нашел разные примеры, как это сделать, но ни один из них не работает.Например: Разделить ячейку на несколько строк в панде.

Может кто-нибудь подсказать, как это сделать?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Мне удалось решить проблему:

colNames = ('Company name','DM Full name')

# Define a dataframe with the required column names
masterDF = pd.DataFrame(columns = colNames)

for i in range (0, len(df)):
    names=df[df.columns[1]][i]
    names=names.splitlines()
    for name in names:
        count+=1
        if name.replace(' ','').isalpha():
            name=name.replace('Mr ','').replace('Ms ','')
            company=df[df.columns[0]][i]
            company=company.replace('\n',' ')
        else:
            pass

        a = str(company)
        b = str(name)

        masterDF = masterDF.append({'Company name': a, 'DM Full name': b}, ignore_index=True)

print masterDF
0 голосов
/ 24 сентября 2018

Похоже, что название компании есть в вашем индексе, чтобы вывести это в виде столбца, который вы можете попробовать запустить:

df = df.reset_index()

Если это не так, попробуйте создать небольшой воспроизводимый пример

Изменить: Из вашего комментария я не на 100% уверен, но я думаю, что у вас есть пустые строки в столбце названия вашей компании для каждой из ваших строк, которые являются просто человеком?

В этом случае сначала заменитепустые строки с пропусками, а затем вперед заполнить.

df = df.replace(r'^\s+$', np.nan, regex=True)
df["Company name"] = df["Company name"].fillna(method="ffill")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...