PythonPandas:如何在没有pivot()的情况下取消融合?

2024-09-30 03:24:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧:

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],
})

enter image description here

我希望将其转换为:

enter image description here

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


Tags: 数据方法namedataframedfvaluecol2col1
2条回答

使用^{}append=True表示MultiIndex并通过^{}重塑形状,然后删除不必要的列并通过^{}连接到原始列:

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      d
0     1     1  100.0    NaN    NaN    NaN
1     2     2    NaN  200.0    NaN    NaN
2     3     3    NaN    NaN  300.0    NaN
3     4     4    NaN    NaN    NaN  400.0

你可以用unstack这样的一行代码来完成

df.set_index(["col1", "col2", "PARMAM_NAME"])["PARMAM_VALUE"].unstack().reset_index()

基本上,我将索引中的其他列放在开头(col1col2),然后是要透视的列(PARMAM_NAME)。之后,我在PARMAM_VALUE上取消了最后一个索引的堆栈。为了完成,我重置了索引,将col1col2从索引移回数据帧

尽管如此,如果您对pivot_table没有问题,也可以这样做:

df.pivot_table("PARMAM_VALUE", ["col1", "col2"], "PARMAM_NAME").reset_index()

相关问题 更多 >

    热门问题