【问题标题】:Transpose dataframe with respect to a column without duplicate columns相对于没有重复列的列转置数据框
【发布时间】:2021-01-19 13:15:04
【问题描述】:

我有一个如下所示的 DataFrame:

    ftr_1  ftr_2  ftr_3  ftr_4
    1      0.1    A      10
    2      0.2    A      11
    3      0.3    B      12
    4      0.4    B      13 
    5      0.5    C      14
    6      0.6    C      15
    7      0.7    D      16
    8      0.8    D      17

现在我想转置这个 DataFrame,以便我的列变成行/索引,而我的 ftr_3 列变成列,如下所示:

        A    B    C    D
ftr_1   1    3    5    7
ftr_1   2    4    6    8
ftr_2   0.1  0.3  0.5  0.7
ftr_2   0.2  0.4  0.6  0.8
ftr_4   10   12   14   16 
ftr_4   11   13   15   17

我想对 ftr_3 列进行转置,但不想同时有重复的列,也不想丢失数据。

我尝试了以下方法,但最终出现了重复的列:-

    df.set_index(['ftr_3'],inplace=True,drop=True)
    df = df.T

这可能是一个简单的支点,但我坚持这一点。请提前帮助和感谢。

【问题讨论】:

    标签: python pandas matrix


    【解决方案1】:

    你可以试试:

    df.set_index(["ftr_3",df.groupby("ftr_3").cumcount()]).unstack().T.droplevel(1)
    

    ftr_3     A     B     C     D
    ftr_1   1.0   3.0   5.0   7.0
    ftr_1   2.0   4.0   6.0   8.0
    ftr_2   0.1   0.3   0.5   0.7
    ftr_2   0.2   0.4   0.6   0.8
    ftr_4  10.0  12.0  14.0  16.0
    ftr_4  11.0  13.0  15.0  17.0
    

    删除索引名称:

    (df.set_index(["ftr_3",df.groupby("ftr_3").cumcount()]).unstack()
       .T.droplevel(1).rename_axis(None,axis=1))
    
              A     B     C     D
    ftr_1   1.0   3.0   5.0   7.0
    ftr_1   2.0   4.0   6.0   8.0
    ftr_2   0.1   0.3   0.5   0.7
    ftr_2   0.2   0.4   0.6   0.8
    ftr_4  10.0  12.0  14.0  16.0
    ftr_4  11.0  13.0  15.0  17.0
    

    【讨论】:

      【解决方案2】:

      您可以使用df.pivot_tableaggfunc 作为list 然后使用pd.Series.explode

      df.pivot_table(columns='ftr_3', aggfunc=list).apply(pd.Series.explode)
      # df.groupby('ftr_3').agg(list).T.apply(pd.Series.explode)
      
      # ftr_3    A    B    C    D
      # ftr_1    1    3    5    7
      # ftr_1    2    4    6    8
      # ftr_2  0.1  0.3  0.5  0.7
      # ftr_2  0.2  0.4  0.6  0.8
      # ftr_4   10   12   14   16
      # ftr_4   11   13   15   17
      

      虽然这种方法可能效率低下(还没有测试过)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-13
        • 2017-12-19
        • 1970-01-01
        • 2019-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多