如何获取多列并将其堆叠为1列,并使旧列命名为一列

问题描述

我要带这张桌子 a table with monsters and columns with skill bonus's most of them null

| Montername | survival | stealth | ...(大约20列)

| abc ....... || 1 ....... | 4 ...... |

我想快速堆叠它们,所以我只有3列,

| Montername |技能奖金|技能|

| abc ....... || 1 ......... |生存|

| abc ....... || 4 ......... |隐身|

我知道我可以以[“ monstername”,{skill}]的形式手动拉出每一列,然后将它们与串联连接起来,然后删除NaN。希望有一个更快的解决方案。

解决方法

您可以使用pandas.DataFrame.stack,这将为您提供具有多个索引的系列,其中第一级是您的原始列,第二级是您的列名称。

stacked = df.stack()

如果要将其制成带有列标签的数据框,则需要将其输入pd.DataFrame(),重置索引并重命名列:

stacked = pd.DataFrame(stacked)
stacked = stacked.reset_index()
stacked = stacked.rename(columns = {'level_0': 'Monstername','level_1': 'skillbonus',0: 'skill'})