将子项目分配给熊猫中的主要项目

时间:2019-05-26 22:32:13

标签: python pandas

我正在寻找熊猫/ python解决方案来根据发票的主要代码来汇总/分组发票中的物品。 请参考第一张所附图片

具有MainCode的每个项目值(价格X数量)应添加到项目总数中。寻找类似的颜色。 (请注意,有些项目可能会重复。例如:绿色和蓝色)不应添加数量。仅值。

enter image description here

答案应如下 enter image description here

我是Pandas的新手,由于这是一个高级问题,所以我无法提供任何代码。因此,张贴在这里。请指示我解决这个问题...

注意事项

  1. 项目组合可以重复。例如,见绿色和蓝色
  2. 一旦完成子项目应被删除(例如,项目371被删除)。
  3. 总价格应等于单个商品价格的总和X数量
  4. 在此示例中,所有子项目代码均为371。但可能有多个代码。例如371、58等
  5. 子项目371可以不带MainCode单独出售。在这种情况下,不应分配它,而应保留它。

更新数据 enter image description here

1 个答案:

答案 0 :(得分:1)

希望您喜欢它。下次,请不要以图像形式而是以文本形式提供输入数据。

import pandas as pd

data_raw = [[260, 1500, 3, 0, 4500], [260, 1500, 1, 0, 1500], [258, 1500, 4, 0, 6000], [1054, 1200, 1, 0, 1200],
[371, 700, 3, 260, 2100], [371, 700, 1, 260, 700], [371, 700, 1, 1054, 700], [371, 700, 4, 258, 2800]]

 data = pd.DataFrame(data_raw, columns=['item', 'price', 'qty','Main code','Total'])

remove_index= []
for index, row in data.iterrows():
     try:
         # find item in Main code
         main_code_data = data.loc[data['Main code'] == row['item']]
         # merge values
         data.at[index, 'Total'] = row['Total'] + row['qty']* (main_code_data['Total'].values[0]/main_code_data['qty'].values[0])
         # get indexes to remove
         for item in main_code_data.index:
            remove_index.append(item)
     except:
         # if no match
         pass

 # remove used lines
 data = data.drop(remove_index)

输出:

   item  price  qty  Main code  Total
0   260   1500    3          0   6600
1   260   1500    1          0   2200
2   258   1500    4          0   8800
3  1054   1200    1          0   1900