Python Pandas:如何在没有 pivot() 的情况下解开?

我有一个数据框:


df = pd.DataFrame({

    "col1":[1,2,3,4],

    "col2":[1,2,3,4],

    "PARMAM_NAME":["a", "b", "c", "d"],

    "PARMAM_VALUE":[100, 200, 300, 400],

})

http://img3.mukewang.com/62df58070001ed2104320189.jpg

我希望它转换为:

http://img4.mukewang.com/62df58100001ca5c04550189.jpg

有没有一种简单的方法可以做到这一点?



潇潇雨雨
浏览 83回答 2
2回答

芜湖不芜

你可以在这样的单行中使用unstack来做到这一点。df.set_index(["col1", "col2", "PARMAM_NAME"])["PARMAM_VALUE"].unstack().reset_index()基本上,我将其他列放在索引的开头(col1, col2),然后是要旋转的列(PARMAM_NAME)。之后,我将最后一个索引放在PARMAM_VALUE. 最后,我将索引重置为移动col1并col2从索引返回到数据框。虽然,如果你对pivot_table 没问题,你也可以这样做:df.pivot_table("PARMAM_VALUE", ["col1", "col2"], "PARMAM_NAME").reset_index()

梵蒂冈之花

使用DataFrame.set_indexwith append=TrueforMultiIndex和 reshape by Series.unstack,然后删除不必要的列并加入原始 by DataFrame.join:df1 = df.set_index('PARMAM_NAME', append=True)['PARMAM_VALUE'].unstack()df = df.drop(['PARMAM_NAME','PARMAM_VALUE'],axis=1).join(df1)print (df)   col1  col2      a      b      c      d0     1     1  100.0    NaN    NaN    NaN1     2     2    NaN  200.0    NaN    NaN2     3     3    NaN    NaN  300.0    NaN3     4     4    NaN    NaN    NaN  400.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python