有没有办法只在 pandas 中转置选定的列?

Is there any way to get transpose of selected columns only in pandas?

我有一个大型数据集,其中大约有 350 多列,我想将这 350 列转换为行并将行值转换为列。用户向品牌提供排名“1-10”,我想将排名 (1-10) 显示为列。

这是我的 df 的样子:

id          Gender       Age            BMW         Audi         VW         Mercedes
1             M          20              3           1           4            2
2             F          50              1           2           3            4
3             F          25              2           1           4            3   

   

而且我想根据需要以这种方式更改它。

id          Gender       Age            Rank1         Rank2           Rank3          Rank4      
1             M          20              Audi        Mercedes          BMW            VW      
2             F          50              BMW          Audi             VW             Mercedes
3             F          25              Audi         BMW              Mercedes       VW        

这样我就可以去掉这么多列了...有什么解决办法吗?

你可以melt+pivot:

idx = ['id','Gender','Age']
m = df.melt(idx).pivot_table(index=idx,columns='value',values='variable',aggfunc='first')
out = m.add_prefix('Rank').reset_index(idx).rename_axis(index=None,columns=None)

print(out)

   id Gender  Age Rank1     Rank2     Rank3     Rank4
0   1      M   20  Audi  Mercedes       BMW        VW
1   2      F   50   BMW      Audi        VW  Mercedes
2   3      F   25  Audi       BMW  Mercedes        VW

同样的想法,但是,您不能使用这种类型的转置来减少列

df.set_index(['id','Gender','Age']).stack().\
     reset_index(level=-1).set_index(0,append=True)['level_3'].\
        unstack(-1).add_prefix('rank_').reset_index()
0  id Gender  Age rank_1    rank_2    rank_3    rank_4
0   1      M   20   Audi  Mercedes       BMW        VW
1   2      F   50    BMW      Audi        VW  Mercedes
2   3      F   25   Audi       BMW  Mercedes        VW