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

连接数据帧中的行和列索引

  •  1
  • Laura  · 技术社区  · 1 年前

    我有一个这样的数据帧,第一列是索引(即,索引=[1,2,3]):

        1      2      3
    1   0      0.43   0.61
    2   0.88   0      0.12
    3   0.33   0.95   0
    

    新的数据帧应如下所示:

    Link      Value
    1_1       0
    1_2       0.43
    1_3       0.61
    2_1       0.88
    2_2       0
    2_3       0.12
    3_1       0.33
    3_2       0.95
    3_3       0
    

    非常感谢您的帮助!非常感谢。

    2 回复  |  直到 1 年前
        1
  •  2
  •   Serge de Gosson de Varennes    1 年前

    只需这样做

    import pandas as pd
    
    data = {
        1: [0, 0.43, 0.61],
        2: [0.88, 0, 0.12],
        3: [0.33, 0.95, 0]
    }
    index = [1, 2, 3]
    df = pd.DataFrame(data, index=index)
    
    df_melted = df.reset_index().melt(id_vars='index', var_name='Column', value_name='Value')
    df_melted['Link'] = df_melted['index'].astype(str) + '_' + df_melted['Column'].astype(str)
    df_result = df_melted[['Link', 'Value']]
    
    
    df_result
    

    它给出

     Link  Value
    0  1_1   0.00
    1  2_1   0.43
    2  3_1   0.61
    3  1_2   0.88
    4  2_2   0.00
    5  3_2   0.12
    6  1_3   0.33
    7  2_3   0.95
    8  3_3   0.00
    
        2
  •  2
  •   mozway    1 年前

    您可以使用 melt 并对列进行后处理(例如 assign pop )要组合索引/列名:

    out = (df.reset_index()
           .melt('index', var_name='Link', value_name='Value')
           .assign(Link=lambda x: x['Link'].astype(str)+'_'+x.pop('index').astype(str))
          )
    

    输出

      Link  Value
    0  1_1   0.00
    1  1_2   0.88
    2  1_3   0.33
    3  2_1   0.43
    4  2_2   0.00
    5  2_3   0.95
    6  3_1   0.61
    7  3_2   0.12
    8  3_3   0.00