在python中将一些列转换为行,将一列的行转换为列

时间:2021-07-13 14:29:02

标签: python pandas dataframe numpy backend

我有一张表,我想将所有年份列转换为行,而一列的行应转换为列。以下是示例表

<头>
城市 销售 2016 2017 2018
A X 100 120 160
A 90 120 130
A Z 130 160 190
B X 200 220 260
B 290 220 230
B Z 230 260 290
C X 300 320 360
C 390 320 330
C Z 330 360 390

决赛桌如下:

<头>
城市 X Y Z
A 2016 100 90 130
A 2017 120 120 160
A 2018 160 130 190
B 2016 200 290 230
B 2017 220 220 260
B 2018 260 230 290
C 2016 300 390 330
C 2017 320 320 360
C 2018 360 330 390

3 个答案:

答案 0 :(得分:2)

试试:

>>> df.melt(id_vars = ["City", "Sales"], 
            value_vars=["2016","2017","2018"], 
            var_name="Year")
      .pivot(index=["City","Year"], columns="Sales", values="value")

Sales        X    Y    Z
City Year               
A    2016  100   90  130
     2017  120  120  160
     2018  160  130  190
B    2016  200  290  230
     2017  220  220  260
     2018  260  230  290
C    2016  300  390  330
     2017  320  320  360
     2018  360  330  390

答案 1 :(得分:2)

使用melt

>>> df.melt(['City', 'Sales'], var_name='Year', value_name=None) \ 
      .set_index(['City', 'Year', 'Sales']) \
      .squeeze().unstack().rename_axis(columns=None)

             X    Y    Z
City Year
A    2016  100   90  130
     2017  120  120  160
     2018  160  130  190
B    2016  200  290  230
     2017  220  220  260
     2018  260  230  290
C    2016  300  390  330
     2017  320  320  360
     2018  360  330  390

答案 2 :(得分:2)

Pivotstack

df.pivot('City', 'Sales').stack(0).rename_axis(['City', 'Year'])

Sales        X    Y    Z
City Year               
A    2016  100   90  130
     2017  120  120  160
     2018  160  130  190
B    2016  200  290  230
     2017  220  220  260
     2018  260  230  290
C    2016  300  390  330
     2017  320  320  360
     2018  360  330  390
相关问题