pandas Python复制具有相同ID值的行

bsxbgnwa  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(92)

我有一个很大的数据框,其中包含ID和多个值,不同的行可以有相同或不同的ID值。我想创建一个新的dataframe,这样,每一行只有一个ID和特定的列值只是追加旁边的ID。DataFrame还具有其他列,这些列具有与我希望保留的相同ID行相同的附加值
| ID| type1| 2型|value1| value2| value3|
| --|--|--|--|--|--|
| 1 |狗|黄色| 1 | 2 | 3 |
| 1 |狗|黄色| 5 | 6 | 7 |
| 2 |猫|布朗| 1 | 1 | 1 |
| 3 |鼠标|蓝色| 1 | 1 | 1 |
| 1 |狗|黄色| 1 | 2 | 3 |
预期输出:
| ID| type1| 2型|值|
| --|--|--|--|
| 1 |狗|黄色| 1 2 3 5 6 7 1 2 3 |
| 2 |猫|布朗| 1 1 1 |
| 3 |鼠标|蓝色| 1 1 1 |
我一直在探索groupby选项,不能让它有这样的输出

3duebb1j

3duebb1j1#

可以使用meltgroupby.agg

group = ['ID', 'type1', 'type2']
out = df.melt(group).groupby(group, as_index=False)['value'].agg(list)

输出量:

ID  type1   type2                        value
0   1    dog  yellow  [1, 5, 1, 2, 6, 2, 3, 7, 3]
1   2    cat   brown                    [1, 1, 1]
2   3  mouse    blue                    [1, 1, 1]

如果秩序很重要:

out = (df.set_index(group).stack().groupby(group).agg(list)
         .reset_index(name='value')
       )

输出量:

ID  type1   type2                        value
0   1    dog  yellow  [1, 2, 3, 5, 6, 7, 1, 2, 3]
1   2    cat   brown                    [1, 1, 1]
2   3  mouse    blue                    [1, 1, 1]

相关问题