将子项目分配给pandas中的主项目[英] Allocating the Sub items to the main Items in pandas

本文是小编为大家收集整理的关于将子项目分配给pandas中的主项目的处理方法,想解了将子项目分配给pandas中的主项目的问题怎么解决?将子项目分配给pandas中的主项目问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在寻找基于主要代码的 pandas/python 解决方案来汇总/分组发票中的项目.请参考第一张附图

应将具有 MainCode 的每个项目值(价格 X 数量)添加到项目 # 总数中.寻找相似的颜色.(请注意某些项目可能会重复.例如:绿色和蓝色) 不应添加数量.只有价值观.

在此处输入图片描述

答案应该如下在此处输入图片描述

我是 Pandas 的新手由于这是一个有点高级的问题,我想不出任何代码.因此,张贴在这里.请指导我解决这个问题...

注意事项

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

更新数据在此处输入图片描述

推荐答案

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

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

本文地址:https://www.itbaoku.cn/post/1727814.html