【问题标题】:How can I unpivot or stack a pandas dataframe in the way that I asked?如何按照我要求的方式取消透视或堆叠 pandas 数据框?
【发布时间】:2020-03-17 03:20:07
【问题描述】:

我有一个 python pandas 数据框。

例如这里是我的数据:

   id   A_1   A_2   B_1   B_2
0  j2   1     5     10    8
1  j3   2     6     11    9
2  j4   3     7     12    10

我希望它看起来像这样:

   id   Other   A   B
0  j2   1       1   10
1  j2   2       5   8
2

请你帮帮我。非常感谢!

【问题讨论】:

    标签: python-3.x pandas numpy dataframe


    【解决方案1】:

    wide_to_longDataFrame.sort_values 一起使用:

    df = (pd.wide_to_long(df, ['A','B'], i='id', j='Other', sep='_')
            .sort_values('id')
            .reset_index())
    print (df)
       id  Other  A   B
    0  j2      1  1  10
    1  j2      2  5   8
    2  j3      1  2  11
    3  j3      2  6   9
    4  j4      1  3  12
    5  j4      2  7  10
    

    【讨论】:

      【解决方案2】:

      我们也可以使用DataFrame.melt + Series.str.split 来执行DataFrame.pivot_table

      df2=df.melt('id')
      df2[['columns','Other']]=df2['variable'].str.split('_',expand=True)
      new_df= ( df2.pivot_table(columns='columns',index=['id','Other'],values='value')
                   .reset_index()
                   .rename_axis(columns=None) )
      
      print(new_df)
         id Other  A   B
      0  j2     1  1  10
      1  j2     2  5   8
      2  j3     1  2  11
      3  j3     2  6   9
      4  j4     1  3  12
      5  j4     2  7  10  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-11
        • 2016-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-04
        • 2021-04-10
        • 2020-11-25
        相关资源
        最近更新 更多