Python 如何获取多个列并将它们堆叠到一列中,并使旧列名成为一列

Python 如何获取多个列并将它们堆叠到一列中,并使旧列名成为一列,python,pandas,multiple-columns,Python,Pandas,Multiple Columns,我想要这张桌子 |蒙特纳姆|生存|隐身|……(大约有20个纵队) |美国广播公司| 我想快速堆叠它们,这样我只有3列 |蒙特纳姆|技能奖金|技能| |abc……| 1……|生存| |abc……| 4……|隐形| 我知道我可以手动将每一列作为[“monstername”、{skill}]拉出来,然后用concatenate堆叠它们,然后删除NaN。希望有一个更快的解决方案。您可以使用pandas.DataFrame.stack,它将为您提供一个具有多索引的系列,其中第一级是原始列,第二级是列名

我想要这张桌子

|蒙特纳姆|生存|隐身|……(大约有20个纵队)

|美国广播公司|

我想快速堆叠它们,这样我只有3列

|蒙特纳姆|技能奖金|技能|

|abc……| 1……|生存|

|abc……| 4……|隐形|


我知道我可以手动将每一列作为[“monstername”、{skill}]拉出来,然后用concatenate堆叠它们,然后删除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'})

df=df['|Monternam',skillbonus',skill']]如果文件中的数据是txt格式的,则两个for循环。首先让循环按\n拆分,然后按“|”拆分。当它剥离第二个时,使用index将其还原。我猜此解决方案假设您已经将其作为熊猫数据框,看起来像您发布的屏幕截图,如果您需要任何帮助,请告诉我从文本文件或其他文件将其转换为该格式。注意,出于我的需要,我必须确保将“monstername”设置为索引。好,我的第一行将monstername和skillbonus设置为索引列。我的建议是只添加
stacked=stacked.set_index('Monstername')
作为结尾,因为这不会影响列重命名。