Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas-数据帧将列或数据透视列转换为新行_Python_Pandas - Fatal编程技术网

Python Pandas-数据帧将列或数据透视列转换为新行

Python Pandas-数据帧将列或数据透视列转换为新行,python,pandas,Python,Pandas,我有一个这样的数据框 EmpID FirstName LastName Relationship FirstName.1 LastName.1 Relationship.1 1 Ax Bx 1A Cx Dx 1B EmpID FirstName LastName Relationship 1

我有一个这样的数据框

EmpID   FirstName    LastName     Relationship   FirstName.1  LastName.1   Relationship.1
1        Ax            Bx              1A           Cx          Dx             1B
EmpID       FirstName          LastName       Relationship
 1           Ax                   Bx             1A
 1           Cx                   Dx             1B
我的excel源文件在重复的列上没有.1,但熊猫创建了它-当我阅读它时,我认为这就是它的方式-数据库中不能有重复的列

我想把它转换成这样的数据帧

EmpID   FirstName    LastName     Relationship   FirstName.1  LastName.1   Relationship.1
1        Ax            Bx              1A           Cx          Dx             1B
EmpID       FirstName          LastName       Relationship
 1           Ax                   Bx             1A
 1           Cx                   Dx             1B

我们如何进行这种转变。谢谢。

您可以创建两个新数据帧,然后将第二个数据帧附加到第一个数据帧:

df1 = df[['EmpID', 'FirstName', 'LastName', 'Relationship']]
df2 = df[['EmpID', 'FirstName.1', 'LastName.1', 'Relationship.1']]

df2.rename(columns=lambda x: x.replace('.1',''), inplace=True)

df = df1.append(df2, ignore_index=True)

您可以创建两个新数据帧,然后将第二个数据帧附加到第一个数据帧:

df1 = df[['EmpID', 'FirstName', 'LastName', 'Relationship']]
df2 = df[['EmpID', 'FirstName.1', 'LastName.1', 'Relationship.1']]

df2.rename(columns=lambda x: x.replace('.1',''), inplace=True)

df = df1.append(df2, ignore_index=True)
这可以通过pandas.wide_到_long来完成,但是您的列名并不完美,因此我们通过在名称后面附加.0来创建第一个实例存根

import pandas as pd
df.columns = [f'{x}.0' if not '.' in x and x != 'EmpID' else x for x in df.columns]

pd.wide_to_long(df, stubnames=['FirstName', 'LastName', 'Relationship'], 
                sep='.', i='EmpID', j='suff').reset_index().drop(columns='suff')

   EmpID FirstName LastName Relationship
0      1        Ax       Bx           1A
1      1        Cx       Dx           1B
这可以通过pandas.wide_到_long来完成,但是您的列名并不完美,因此我们通过在名称后面附加.0来创建第一个实例存根

import pandas as pd
df.columns = [f'{x}.0' if not '.' in x and x != 'EmpID' else x for x in df.columns]

pd.wide_to_long(df, stubnames=['FirstName', 'LastName', 'Relationship'], 
                sep='.', i='EmpID', j='suff').reset_index().drop(columns='suff')

   EmpID FirstName LastName Relationship
0      1        Ax       Bx           1A
1      1        Cx       Dx           1B

创建仅包含4列的数据帧:EmpID、FirstName、LastName、Relationship,…然后将数据帧与pd.merge合并是一个好主意吗?创建仅包含4列的数据帧:EmpID、FirstName、LastName、Relationship,…然后将数据帧与pd.merge合并是一个好主意吗?谢谢。从来没有想过要这样打破它。谢谢,谢谢。从来没有想过要这样打破它。谢谢