Python 是否有任何方法可以仅在pandas中获得选定列的转置?
我有一个很大的数据集,其中大约有350多列,我想将这350列转换为行和作为列的行值。用户为品牌提供排名1-10,我想将排名1-10显示为coluumns。以下是我的df的外观: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
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