繁体   English   中英

熊猫-DataFrame将列或枢轴转换为新行

[英]Pandas - DataFrame Convert column or Pivoting Column into a new row

我有一个这样的数据框,

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

我的excel源文件在重复列上没有.1,但是大熊猫创建了它-当我阅读它时,我认为是这样的-数据库中不能有重复列。

我想将其转换为这样的数据框,

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)

>>> print(df)

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

可以使用pandas.wide_to_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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM