首页 > 解决方案 > 如何仅转置数据帧的一部分或交换行和列?

问题描述

输入数据框是这样的:

branch   Round   letter   var1   var2   var3
  A        1       a       1      2     4
  A        1       b       3      4     5
  B        2       a       6      7     9
  B        2       b       2      3     8

我只想将第 3 列(即“字母”)与“var1”、“var2”、“var3”列交换,如下所示:

输出数据框:

branch   Round   category   a   b
  A        1        var1    1   3
  A        1        var2    2   4
  A        1        var3    4   5
  B        2        var1    6   2
  B        2        var2    7   3
  B        2        var3    9   8  

如何使用熊猫做到这一点?

标签: pythonpandasdataframe

解决方案


将分支和字母设置为索引,然后堆叠数据帧,并在级别 1 取消堆叠。如果需要,您可以重置索引。

>>>  (df.set_index(['branch', 'letter'])
    .stack()
    .unstack(1)
    .reset_index(-1)
    .rename(columns={'level_1':'category'}))

输出:

letter category  a  b
branch               
A          var1  1  3
A          var2  2  4
A          var3  4  5
B          var1  6  2
B          var2  7  3
B          var3  9  8

您甚至可以DataFrame.pivot使用stack

>>> df.pivot('branch', 'letter').stack(0)

letter       a  b
branch           
A      var1  1  3
       var2  2  4
       var3  4  5
B      var1  6  2
       var2  7  3
       var3  9  8

推荐阅读