Python 从多个ID列创建新的DataFrame行
我有一个数据框架,其中行具有属性,并且可能有多个ID。例如:Python 从多个ID列创建新的DataFrame行,python,pandas,Python,Pandas,我有一个数据框架,其中行具有属性,并且可能有多个ID。例如: Name Weapon Color ID1 ID2 ID3 Leo Sword Blue 11 12 Raph Sai Red 13 Don Bo Purple 14 15 16 Mike Nunchuck Orange 17 Name Weapon Color ID Leo
Name Weapon Color ID1 ID2 ID3
Leo Sword Blue 11 12
Raph Sai Red 13
Don Bo Purple 14 15 16
Mike Nunchuck Orange 17
Name Weapon Color ID
Leo Sword Blue 11
Leo Sword Blue 12
Raph Sai Red 13
Don Bo Purple 14
Don Bo Purple 15
Don Bo Purple 16
Mike Nunchuck Orange 17
我想让这些ID中的每一个都有自己的行,同时保留行的属性。例如:
Name Weapon Color ID1 ID2 ID3
Leo Sword Blue 11 12
Raph Sai Red 13
Don Bo Purple 14 15 16
Mike Nunchuck Orange 17
Name Weapon Color ID
Leo Sword Blue 11
Leo Sword Blue 12
Raph Sai Red 13
Don Bo Purple 14
Don Bo Purple 15
Don Bo Purple 16
Mike Nunchuck Orange 17
如何使用选定的特定列创建行,以及从哪些列保留数据?您可以使用:
df.melt(['Name','Weapon','Color'],value_name='ID').drop('variable',1).dropna()
您可以使用:
df.melt(['Name','Weapon','Color'],value_name='ID').drop('variable',1).dropna()
您还可以使用stack,它保持数据的原始顺序:
(df.set_index(['Name', 'Weapon', 'Color'])
.stack().reset_index(level=-1, drop=True)
.reset_index(name='ID'))
输出:
Name Weapon Color ID
0 Leo Sword Blue 11.0
1 Leo Sword Blue 12.0
2 Raph Sai Red 13.0
3 Don Bo Purple 14.0
4 Don Bo Purple 15.0
5 Don Bo Purple 16.0
6 Mike Nunchuck Orange 17.0
请注意,这将忽略原始数据帧的索引。您也可以使用堆栈,它保持数据的原始顺序:
(df.set_index(['Name', 'Weapon', 'Color'])
.stack().reset_index(level=-1, drop=True)
.reset_index(name='ID'))
输出:
Name Weapon Color ID
0 Leo Sword Blue 11.0
1 Leo Sword Blue 12.0
2 Raph Sai Red 13.0
3 Don Bo Purple 14.0
4 Don Bo Purple 15.0
5 Don Bo Purple 16.0
6 Mike Nunchuck Orange 17.0
请注意,这将忽略原始数据帧的索引。df.melt['Name'、'wear'、'Color'],value_Name='ID'。如果需要按ID排序,则删除'variable',1.dropna.sort_值'ID'节省的方法是按['Name'、'wearm'、'Color']排序,因为这些列是熔化的,但很好的答案是upvoteddf.melt['Name'、'wearm'、'Color'],value_Name='ID'。如果需要按ID排序,则删除'variable',1.dropna.sort_值'ID'节省的方法是按[‘名称’、‘武器’、‘颜色’]进行排序,因为这些列是熔化的,但很好的答案是向上投票