我有一个这样的数据框,
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
我们如何进行这种转换。谢谢。
答案 0 :(得分:2)
您可以创建两个新的数据框,然后将第二个添加到第一个:
console.log
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)
答案 1 :(得分:2)
这可以通过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