使用熊猫重塑数据框

时间:2019-02-20 00:54:43

标签: python pandas

我有这样的.csv文件

ID FirstName LastName  Age   FirstName   LastName   Age
1   Sid       Than      21     Sidd         Thang   26
2   Art       Mari      21     Arth         Mariap  28

当我在python中使用pandas阅读此内容时,所有第二次出现的列名称都会自动更改为FirstName_y LastName_y Age_y。

现在,我想将df更改为这样,

Name_Key        ID   FirstName LastName   Age
1_Sid_Than      1     Sid       Than       21
1_Sidd_Thang    1     Sidd      Thang      26
2_Art_Mari      2     Art       Mari       21
2_Arth_Mariap   2     Arth      Mariap     28
在我的情况下,

ID是一个字符串。 我如何使用熊猫来做到这一点。

3 个答案:

答案 0 :(得分:1)

提取两个不同数据框中的值,然后将它们连接起来

import pandas as pd
df = pd.read_csv('filename.csv')
df_1 = df[['ID', 'FirstName', 'LastName', 'Age']]
df_2 = df[['ID', 'FirstName_y', 'LastName_y', 'Age_y']]
df_2.columns = ['ID', 'FirstName', 'LastName', 'Age']
df = pd.concat([df_1, df_2], axis=0)

答案 1 :(得分:1)

List<int> JobHistory可以重复多次

AddressDTO

答案 2 :(得分:1)

我将使用lambda函数来连接3列的项目。

我创建一个数据框:

    df=pd.DataFrame([['Ann', 'Black',5], ['Peter','Black', 5], ['Laura','White', 8],
                    ['Sean','Green',9]], index=[1,1,2,3], 
                    columns=['Name', 'Family_name', 'Age'])

数据框:

        Name Family_name  Age
    1    Ann       Black    5
    1  Peter       Black    5
    2  Laura       White    8
    3   Sean       Green    9

我用索引生成一个新列ID,并将新列的项从int转换为str,因为稍后我将其与字符串连接起来,所以所有3列都必须是str。

    df['col']=df.index.astype(str)

现在的数据框:

        Name Family_name  Age  ID
    1    Ann       Black    5   1
    1  Peter       Black    5   1
    2  Laura       White    8   2
    3   Sean       Green    9   3

我应用了 lambda 函数:

    col2=df['Family_name']
    col1=df['Name']
    col3=df['ID']
    new=map(lambda row0,row1,row2:row0+'_'+row1+'_'+row2,col3,col1,col2)
    new_list=list(new)
    df['new']=new_list

您会得到:

        Name Family_name  Age  ID            new
    1    Ann       Black    5   1    1_Ann_Black
    1  Peter       Black    5   1  1_Peter_Black
    2  Laura       White    8   2  2_Laura_White
    3   Sean       Green    9   3   3_Sean_Green

然后您可以根据需要对列进行重新排序