Reshaping a pandas dataframe by repeating rows

后端 未结 1 557
没有蜡笔的小新
没有蜡笔的小新 2020-12-22 14:39

I am new to Python especially Pandas. I have one dataframe like

-----------------------------------------------------
Id     Name    Salary    desc1     des         


        
相关标签:
1条回答
  • 2020-12-22 15:13

    You need set_index + stack:

    df = df.set_index(['Id','Name','Salary'])
           .stack()
           .reset_index(level=3, drop=True)
           .reset_index(name='Variable')
    
    print (df)
       Id  Name  Salary Variable
    0   1  ABC1    2000       x1
    1   1  ABC1    2000       y1
    2   1  ABC1    2000       z1
    3   2  ABC2    5000       x2
    4   2  ABC2    5000       y1
    5   2  ABC2    5000       z2
    

    If sorting first 3 columns is not necessary:

    Use melt:

    df = df.melt(['Id','Name','Salary'], value_name='Variable').drop('variable', axis=1)
    print (df)
       Id  Name  Salary Variable
    0   1  ABC1    2000       x1
    1   2  ABC2    5000       x2
    2   1  ABC1    2000       y1
    3   2  ABC2    5000       y1
    4   1  ABC1    2000       z1
    5   2  ABC2    5000       z2
    

    lreshape is now undocumented, but is possible in future will by removed (github link).

    df = pd.lreshape(df, {'Variable':['desc1','desc2','desc3']})
    print (df)
       Id  Name  Salary Variable
    0   1  ABC1    2000       x1
    1   2  ABC2    5000       x2
    2   1  ABC1    2000       y1
    3   2  ABC2    5000       y1
    4   1  ABC1    2000       z1
    5   2  ABC2    5000       z2
    
    0 讨论(0)
提交回复
热议问题