【问题标题】:Transpose row with column instead of column with row用列转置行而不是用行转置列
【发布时间】:2022-11-17 06:23:22
【问题描述】:

transpose 能否通过遍历所有列的第一行然后仅遍历所有列的第二行来转换数据,而不是遍历所有行的第一列然后仅遍历所有行的第二列?

意味着需要将列转换为行,所有相同的数据可以在一组中。

原始数据:

 columnA     columnB     columnC     columnD     columnE   ...
   IdA          a           b            c           d
   IdB          5           6            7           8
   IdC          e           f            g           h
   IdD          4           5            6           7   

transpose = pd.melt(id_vars = ['columnA']
          ,var_name = ['header']
          ,value_name = 'info')

输出:

 columnA    header     info
    IdA     columnB      a
    IdB     columnB      5
    IdC     columnB      e
    IdD     columnB      4

    IdA     columnC      b
    IdB     columnC      6
    IdC     columnC      f
    IdD     columnC      5

...

预期输出:

 columnA    header     info
    IdA     columnB      a
    IdA     columnC      b
    IdA     columnD      c
    IdA     columnE      d

    IdB     columnB      5
    IdB     columnC      6
    IdB     columnD      7
    IdB     columnE      8

...

【问题讨论】:

  • 请始终为您的问题添加更多相关标签,例如pandas

标签: python pandas


【解决方案1】:

您将需要使用stack

out = (df.set_index('columnA').rename_axis(columns='header')
         .stack(dropna=False).reset_index(name='info')
      )

注意。默认情况下,stack 删除 NaN 值,以使用 dropna=False 参数保留它们。

输出:

   columnA   header info
0      IdA  columnB    a
1      IdA  columnC    b
2      IdA  columnD    c
3      IdA  columnE    d
4      IdB  columnB    5
5      IdB  columnC    6
6      IdB  columnD    7
7      IdB  columnE    8
8      IdC  columnB    e
9      IdC  columnC    f
10     IdC  columnD    g
11     IdC  columnE    h
12     IdD  columnB    4
13     IdD  columnC    5
14     IdD  columnD    6
15     IdD  columnE    7

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多