【问题标题】:Reshaping a pandas dataframe by repeating rows通过重复行重塑熊猫数据框
【发布时间】:2017-09-11 07:48:50
【问题描述】:

我是 Python 新手,尤其是 Pandas。 我有一个像

这样的数据框
-----------------------------------------------------
Id     Name    Salary    desc1     desc2     desc3
-----------------------------------------------------
1      ABC1    2000       x1        y1        z1
-----------------------------------------------------
2      ABC2    5000       x2        y1        z2
-----------------------------------------------------

我想把它改成这样

-----------------------------------------
ID     Name     Salary      Variable
-----------------------------------------
1      ABC1      2000          x1
-----------------------------------------
1      ABC1      2000          y1
-----------------------------------------
1      ABC1      2000          z1  
-----------------------------------------
2      ABC2      5000          x2  
-----------------------------------------
2      ABC2      5000          y2  
-----------------------------------------
2      ABC2      5000          z2 
-----------------------------------------

请帮忙。提前致谢。

【问题讨论】:

标签: python pandas numpy dataframe


【解决方案1】:

你需要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

如果不需要对前 3 列进行排序:

使用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 现在没有记录,但将来可能会被删除 (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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多