从多个ID列创建新的Pandas DataFrame行

时间:2019-05-22 16:47:43

标签: python pandas

我有一个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

我想在保留行属性的同时使这些ID成为自己的行。例如:

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

如何使用选择的特定列从中创建行以及从哪个列保留数据?

2 个答案:

答案 0 :(得分:4)

您可以使用:

df.melt(['Name','Weapon','Color'],value_name='ID').drop('variable',1).dropna()

    Name    Weapon   Color    ID
0    Leo     Sword    Blue  11.0
1   Raph       Sai     Red  13.0
2    Don        Bo  Purple  14.0
3   Mike  Nunchuck  Orange  17.0
4    Leo     Sword    Blue  12.0
6    Don        Bo  Purple  15.0
10   Don        Bo  Purple  16.0

答案 1 :(得分:2)

您还可以使用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

请注意,这将忽略原始数据帧的索引。