【问题标题】:How to flatten a multi column dataframe into 2 columns如何将多列数据框展平为 2 列
【发布时间】:2022-06-13 05:29:40
【问题描述】:

给定下表:

group_a = {'ba':[2.0,9.4,10.8],
          'bb':[4.2,7.1,3],
          'bc':[8.1,9.5,6.1]}

A = pd.DataFrame(group_a, index=['aa','ab','ac'])

看起来像这样:

    ba   bb   bc
aa  2.0  4.2  8.1
ab  9.4  7.1  9.5
ac  10.8 3.0  6.1

我怎样才能展平这张桌子,使它看起来像这样:

       Values
aa_ba  2.0
aa_bb  4.2
aa_bc  8.1
ab_ba  9.4
ab_bb  7.1
ab_bc  9.5
ac_ba  10.8
ac_bb  3.0
ac_bc  6.1

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以使用stack 并重做索引:

    B = A.stack()
    B.index = B.index.map('_'.join)
    out = B.to_frame('Values')
    

    输出:

           Values
    aa_ba     2.0
    aa_bb     4.2
    aa_bc     8.1
    ab_ba     9.4
    ab_bb     7.1
    ab_bc     9.5
    ac_ba    10.8
    ac_bb     3.0
    ac_bc     6.1
    

    【讨论】:

      【解决方案2】:

      由于您已经设置了索引,因此您可以使用.stack 操作最轻松地完成此操作。这导致pd.SeriesMultiIndex,我们可以使用“_”.join 通过下划线连接MultiIndex 的每个级别并创建一个平面Index。最后,由于您想要一列 DataFrame,您可以使用 .to_frame()Series 转换为 DataFrame

      out = A.stack()
      out.index = out.index.map("_".join)
      out = out.to_frame("values")
      
      print(out)
             values
      aa_ba     2.0
      aa_bb     4.2
      aa_bc     8.1
      ab_ba     9.4
      ab_bb     7.1
      ab_bc     9.5
      ac_ba    10.8
      ac_bb     3.0
      ac_bc     6.1
      

      你也可以使用方法链式的方法——只需要使用.pipe来访问堆叠索引:

      out = (
          A.stack()
          .pipe(lambda s: s.set_axis(s.index.map("_".join)))
          .to_frame("values")
      )
      
      print(out)
             values
      aa_ba     2.0
      aa_bb     4.2
      aa_bc     8.1
      ab_ba     9.4
      ab_bb     7.1
      ab_bc     9.5
      ac_ba    10.8
      ac_bb     3.0
      ac_bc     6.1
      

      【讨论】:

        【解决方案3】:

        堆栈,使用列表理解和 fstrings 来计算新索引。

         s = A.stack().to_frame('values')
            
         s.index=([f'{a}_{b}' for a,b in s.index])
        
        
        
        
                values
        aa_ba     2.0
        aa_bb     4.2
        aa_bc     8.1
        ab_ba     9.4
        ab_bb     7.1
        ab_bc     9.5
        ac_ba    10.8
        ac_bb     3.0
        ac_bc     6.1
        

        【讨论】:

          猜你喜欢
          • 2018-11-09
          • 1970-01-01
          • 2014-10-15
          • 2019-01-10
          • 2021-08-19
          • 1970-01-01
          • 2017-04-18
          • 2023-03-17
          • 2020-09-27
          相关资源
          最近更新 更多