【问题标题】:How to change ColumnB to headers and headers to ColumnB如何将列更改为标题和标题更改为列
【发布时间】:2021-04-25 12:20:52
【问题描述】:

我不知道这是否称为熔体或未熔体,或枢轴或非枢轴,但我想知道是否可以将 ColumnB 更改为标题,从 ColumnF 开始(以及这些标题下的数据点),以及同样,将从 ColumnF 开始的标题更改为 ColumnB。

这是我正在查看的屏幕截图。

这是我的数据。

    qyear   Line_Item                              IDRSSD   schedule_code   RCON3543    RCON3545    RCON3547    RCON3548
97  2011Q1  TRDG ASTS ASTBCKD SCTY AUTO LN         1004368  RCD             7360        7360        7583        $7,583 
98  2012Q1  TRDG ASTS ASTBCKD SCTY OTHR CNSMR LN   1004368  RCD             17807       17807       18092       18092
99  2013Q1  TRDG ASTS ASTBCKD SCTY CMRL  IND LN    1004368  RCD             20073       20073       20971       20971
100 2011Q1  TRDG ASTS ASTBCKD SCTY OTHR LN         1004470  RCD             0       0       0       0
101 2012Q1  TRDG ASTS RTND BNFCL INT SCTY          1004470  RCD             0       0       0       0
102 2013Q1  TRDG ASTS EQT SCTY RDLY DET FV         1004470  RCD             0       0       0       0
103 2012Q1  TRDG ASTS EQT SCTY OTHR                1005075  RCD             0       0       0       0
104 2013Q1  TRDG ASTS LN PEND SCTY                 1005075  RCD             0       0       0       0
105 2011Q1  1ST ITEMIZED AMT FOR OTHR TRDG ASTS    1005440  RCD             0       0       0       0
106 2012Q1  2ND ITEMIZED AMT FOR OTHR TRDG ASTS    1005440  RCD             0       0       0       0
107 2013Q1  3RD ITEMIZED AMT FOR OTHR TRDG ASTS    1005440  RCD             0       0       0       0
108 2011Q1  1ST ITEMIZED AMT FOR OTHR TRDG ASTS    1005459  RCD             0       0       0       0
109 2012Q1  2ND ITEMIZED AMT FOR OTHR TRDG ASTS    1005459  RCD             0       0       0       0
110 2011Q1  3RD ITEMIZED AMT FOR OTHR TRDG ASTS    100553   RCD             0       0       0       0
111 2012Q1  SFP TPS ISS FNCL INSTITUTION           100553   RCD             0       0       0       0
112 2011Q1  SFP TPS ISS RE INV TR                  1005552  RCD             0       0       0       0
113 2012Q1  SFP CORP SIMILAR LN 1                  005552   RCD             0       0       0       0
114 2013Q1  SFP 1T4 FMLY RES MBS ISS US GSE        1005552  RCD             0       0       0       0
115 2011Q1  SFP 1T4 FMLY RES MBS NOT ISS GSE       100562   RCD             0       0       0       0
116 2012Q1  TRDG MBS PT SCTY ISS GUAR FFG          100562   RCD             0       0       0       0
117 2013Q1  TRDG OTHR MBS ISS GUAR FFG             100562   RCD             0       0       0       0
118 2011Q1  TRDG ASSET MBS OTHR RES MBS            1005655  RCD             0       0       0       0
119 2012Q1  TRDG ASSET STRD FNC PROD CASH          1005655  RCD             0       0       0       0
120 2013Q1  TRDG OTHR STRD FNC PROD SYN            1005655  RCD             0       0       0       0
121 2011Q1  TRDG OTHR STRD FNC PROD HYBRID         1005851  RCD             0       0       0       0
122 2012Q1  TRDG ASSET OTHR DEBT SCTY CNSL         1005851  RCD             0       0       0       0

我希望最终的视图看起来像这样。

我注意到转置几乎可以工作,但这会翻转 ColumnC 和 ColumnD,我不想碰这两列。我想将 ColumnC 和 ColumnD 保留在原处,将 ColumnB 移动到标题,并将标题移动到 ColumnB。是否有可能做到这一点?非常感谢!

【问题讨论】:

  • 制作数据子集,并添加预期输出

标签: python pandas pivot unpivot melt


【解决方案1】:

我认为您正在查看stackunstack 的组合

(df.set_index(['qyear','Line_Item','IDRSSD','schedule_code'])
   .stack()
   .unstack('qyear')
   .reset_index()
)

或者unstack 然后transpose:

(df.set_index(['qyear','Line_Item','IDRSSD','schedule_code'])
   .unstack(level=['Line_Item','IDRSSD','schedule_code'])
   .T.reset_index()
)

或者melt 然后pivot

(df.melt(id_vars=['qyear','Line_Item','IDRSSD','schedule_code'])
   .pivot_table(index=['Line_Item','IDRSSD','schedule_code', 'variable'], 
                columns='qyear', values='value', aggfunc='first')
   .reset_index()
)

【讨论】:

  • 哇!我认为任何/所有这些选项都对我有用!你能解释一下这里发生了什么吗?请简单介绍一下。非常感谢!!!!
  • @ASH 基本上就是你所说的:制作列qyear 标题意味着pivot,将标题F-I 设为列意味着melt。这两个操作几乎可以互换。所以这只是玩一小段数据的问题。 P/S:我也亲身体验过这种变换。
  • 我被困了一段时间。我几乎开始认为做这种事情是不可能的。再次感谢!!
  • 你好,广晃。再次感谢您向我展示了这个概念。这为我节省了很多时间,它帮助我找到了一些更有效的方法来做以前需要很长时间才能完成的事情。我之前的方法有缺陷;这种方式好多了。
  • 似乎 aggfunc='sum' 可以解决问题。
猜你喜欢
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多