Python:将一行的多行拆分为单行(单个)

时间:2018-09-24 19:39:02

标签: python pandas dataframe

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

我找到了不同的示例作为实现方法,但是没有一个起作用。例如:Split cell into multiple rows in pandas dataframe

有人可以帮我怎么做吗?

2 个答案:

答案 0 :(得分:0)

看起来公司名称在您的索引中,要将此列显示为列,您可以尝试运行:

df = df.reset_index()

如果不是这种情况,请尝试创建一个可重现的小示例

编辑:从您的评论来看,我不是100%清楚,但我认为您的公司名称列中每个人的行中都有空白字符串?

在这种情况下,首先将空白字符串替换为缺失的字符串,然后向前填充。

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

答案 1 :(得分:0)

我设法解决了这个问题:

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
相关问题