Python 是否有任何方法可以仅在pandas中获得选定列的转置?

Python 是否有任何方法可以仅在pandas中获得选定列的转置?,python,pandas,dataframe,transform,Python,Pandas,Dataframe,Transform,我有一个很大的数据集,其中大约有350多列,我想将这350列转换为行和作为列的行值。用户为品牌提供排名1-10,我想将排名1-10显示为coluumns。以下是我的df的外观: id Gender Age BMW Audi VW Mercedes 1 M 20 3 1 4

我有一个很大的数据集,其中大约有350多列,我想将这350列转换为行和作为列的行值。用户为品牌提供排名1-10,我想将排名1-10显示为coluumns。以下是我的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        
这样我就可以去掉这么多的栏目。。。有解决办法吗

您可以熔化+旋转:

您可以熔化+旋转:


但是,使用这种类型的转置不能减少列

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

但是,使用这种类型的转置不能减少列

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

到目前为止,您尝试了什么,为什么不起作用?到目前为止,您尝试了什么,为什么不起作用?谢谢您的回答。实际上,它会减少列数,因为我有大约350个品牌列表。我在这里只是举4个例子。谢谢你的回答。实际上,它会减少列数,因为我有大约350个品牌列表。我在这里只是举4个例子。谢谢你的回答。你知道为什么我的行数增加了吗?以前我有大约22900行,现在我有了23100@s_khan92很难说,因为我们没有更多关于数据的上下文,可以尝试使用idx=['index'、'id'、'Gender'、'Age']来代替df.melt。。。使用df.reset_index.melt,猜猜看谢谢你的回答。你知道为什么我的行数增加了吗?以前我有大约22900行,现在我有了23100@s_khan92很难说,因为我们没有更多关于数据的上下文,可以尝试使用idx=['index'、'id'、'Gender'、'Age']来代替df.melt。。。使用df.reset_index.melt,只是猜测而已
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