代码之家  ›  专栏  ›  技术社区  ›  RustyShackleford

如何在数据帧中保留所有静态列的同时,在列内翻转列名称和值的数据帧?

  •  1
  • RustyShackleford  · 技术社区  · 7 年前

    我有一个dataframe,它有500列,2列('FieldTitle','Value')列,其中的行要“翻转”为列,df如下所示:

    id    FieldTitle    Value   UID   number  XID
    1       fname        aaa     12    123    345
    1       lname        bbb     12    123    345
    2       fname        ccc     23    432    543
    2       lname        ddd     23    432    543
    

    id     fname     lname     UID    number  XID
    1       aaa       bbb       12     123    345
    2       ccc       ddd       23     432    543
    

    当前,当我透视时,只有“FieldTitle”和“Value”中的列剩余,而所有静态列都被删除。

    我也尝试过以下方法,但没有成功:

    pivoted_df = pd.pivot_table(df, index='Id', columns='FieldTitle', values=['Value'], aggfunc='first').reset_index()
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    可以将列名列表传递给参数 index :

    pivoted_df = pd.pivot_table(df, index=['id','UID','number','XID'], 
                                    columns='FieldTitle', 
                                    values='Value', 
                                    aggfunc='first').reset_index()
    print (pivoted_df)
    FieldTitle  id  UID  number  XID fname lname
    0            1   12     123  345   aaa   bbb
    1            2   23     432  543   ccc   ddd
    

    如果要动态地将值添加到 指数

    cols = df.columns.difference(['FieldTitle','Value']).tolist()
    
    pivoted_df = pd.pivot_table(df, index=cols, 
                                    columns='FieldTitle', 
                                    values='Value', 
                                    aggfunc='first').reset_index()
    print (pivoted_df)