首页 > 解决方案 > 组合多个值和排序

问题描述

我有以下详细的发票数据。

+------------+---------------+--------+-----+-------+------------+-------------+
| Invoice No | Invoice Total | Item # | qty | price | Item Total | Inventory # |
+------------+---------------+--------+-----+-------+------------+-------------+
|          1 |            42 |    123 |   1 |    10 |         10 |           0 |
|          1 |            42 |    234 |   2 |    12 |         24 |          10 |
|          1 |            42 |    345 |   1 |     8 |          8 |           0 |
|          2 |           224 |    123 |   3 |    10 |         30 |           4 |
|          2 |           220 |    234 |   2 |    12 |         24 |           3 |
|          2 |           220 |    345 |   8 |     1 |          8 |           0 |
|          2 |           220 |    456 |  10 |    12 |        120 |           2 |
|          2 |           220 |    567 |   7 |     6 |         42 |           4 |
|          3 |            34 |    123 |   1 |    10 |         10 |          10 |
|          3 |            34 |    234 |   2 |    12 |         24 |           0 |
|          4 |            30 |    123 |   1 |    10 |         10 |           0 |
|          4 |            30 |    234 |   2 |    12 |         24 |           3 |
+------------+---------------+--------+-----+-------+------------+-------------+

对于每个独特的个体Invoice No,我想Inventory #用连接和排序的值连接 & 替换列(从左到右升序)。还应删除任何重复的值。例如。Invoice No - 2已经Inventory # - 4重复了两次。

我想要的结果如下

+------------+---------------+--------+-----+-------+------------+-------------+
| Invoice No | Invoice Total | Item # | qty | price | Item Total | Inventory # |
+------------+---------------+--------+-----+-------+------------+-------------+
|          1 |            42 |    123 |   1 |    10 |         10 | 0,10        |
|          1 |            42 |    234 |   2 |    12 |         24 | 0,10        |
|          1 |            42 |    345 |   1 |     8 |          8 | 0,10        |
|          2 |           224 |    123 |   3 |    10 |         30 | 0,2,3,4     |
|          2 |           220 |    234 |   2 |    12 |         24 | 0,2,3,4     |
|          2 |           220 |    345 |   8 |     1 |          8 | 0,2,3,4     |
|          2 |           220 |    456 |  10 |    12 |        120 | 0,2,3,4     |
|          2 |           220 |    567 |   7 |     6 |         42 | 0,2,3,4     |
|          3 |            34 |    123 |   1 |    10 |         10 | 0,10        |
|          3 |            34 |    234 |   2 |    12 |         24 | 0,10        |
|          4 |            30 |    123 |   1 |    10 |         10 | 0,3         |
|          4 |            30 |    234 |   2 |    12 |         24 | 0,3         |
+------------+---------------+--------+-----+-------+------------+-------------+

请指导我解决这个问题..

标签: pythonpandas

解决方案


我会的transformset会删除重复的并排序,然后只需要join

df['Inventory #']=df.groupby('Invoice No')['Inventory'].\
                      transform(lambda x : ','.join(set(x.astype(str))))

推荐阅读