簡體   English   中英

Python:將一行的多行拆分為單行(單個)

[英]Python: split multiple lines of a row into single (individual) rows

我有一個包含公司和人員名稱的數據框。 例如,在同一行中,第一列中的公司名稱,第二列中的人名稱是公司的一部分(每行一個名稱)。 每個公司的人數各不相同,我有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

我已經找到了不同的示例作為實現方法,但是它們都不起作用。 例如: 在pandas數據框中將單元格拆分為多行

有人可以幫我怎么做嗎?

看起來公司名稱在索引中,要將此列顯示為列,可以嘗試運行:

df = df.reset_index()

如果不是這種情況,請嘗試創建一個小的可復制示例

編輯:從您的評論來看,我不是100%清楚,但我認為您的公司名稱列中的每個人都是空字符串?

在這種情況下,請先用空格替換空白字符串,然后再進行填充。

df = df.replace(r'^\s+$', np.nan, regex=True)
df["Company name"] = df["Company name"].fillna(method="ffill")

我設法解決了這個問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM