对于重复的行,请创建分数值以填充另一列

时间:2019-05-20 12:32:02

标签: python pandas numpy

我什么都没有生成数据集。 假设我的数据如下:

Country |Quantity |ProdBatchNo | Volume | Batch_Quantity 
--------|---------|------------|--------|----------------
Mars    |     0   | B9-3       | 1.00   | 6439.849161    
Jupiter |     0   | B9-3       | 0.50   | 6439.849161    
Neptune |     0   | B9-3       | 1.25   | 6439.849161       

我想随机为每个国家/地区分配一定数量的产品,然后计算该国家/地区分配给Batch_Quantity的总百分比。 我能想到的唯一方法是除以6439/3 =(2146),那么火星的数量将变为1.00 x 2146 = 2146,木星的数量将变为0.50 x 2146 = 1073,海王星的数量将变为1.25 * 2146 = 2682。

但是,当我将这些总数加起来得出批次的总百分比时​​,这些数字并没有加起来。火星占33%,木星占16%,海王星占41%。这总共占90%,但我希望将Batch_Quantity完全分配给这些国家/地区,不要剩余。

我意识到这和数据一样是一个数学问题,由于我自己生成该数据集很难解释自己的意思,因此分配给一个国家的ProdBatchNo数量可以只要所有Batch_Quantity在国家/地区之间分配,就完全是完全随机

在有重复的ProdBatchNo行之前,我的方法很简单-我将Batch_Quantity舍入到最接近的100,然后将其除以体积(容器的大小)以生成“数量”。但是,我想根据数量将Batch_Quantity总计分为3个产品批次,并将其分配给我的假设国家火星,木星和海王星,并为每个ProdBatchNo(总Batch_Quantity)分配%_Vol_allocation。

对不起,我不太擅长解释我要寻找的东西。 有人在跟着我吗? 谢谢:)

2 个答案:

答案 0 :(得分:0)

df=pd.DataFrame({"Country":['Mars','Jupiter','Neptune'],"Quantity":['0','0','0'],"ProdBatchNo":["B9-3","B9-3","B9-3"],
                 "Volume":["1.00","0.50","1.25"],"Batch_Quantity":["6439.849161","6439.849161","6439.849161"]})





countries=df['Country'].count()

df['Quantity']=(df['Volume'].astype(float)*df['Batch_Quantity'].astype(float)/countries)
sum_Quantity=df['Quantity'].sum()
Batch_Quantity=df['Batch_Quantity'][0]
rest=float(Batch_Quantity)-float(sum_Quantity)
rest_to_add=rest/3
df['New_Quantity']=df['Quantity']+rest_to_add
df['%_Vol_allocated']=((df['New_Quantity'].astype(float)/df['Batch_Quantity'].astype(float))*100).round(2)
print(df)

  Batch_Quantity  Country ProdBatchNo     Quantity Volume  New_Quantity  %_Vol_allocated
0    6439.849161     Mars        B9-3  2146.616387   1.00   2325.501086            36.11
1    6439.849161  Jupiter        B9-3  1073.308194   0.50   1252.192892            19.44
2    6439.849161  Neptune        B9-3  2683.270484   1.25   2862.155183            44.44

现在%_Vol_allocated中的New_Quantity大约是100% 在['New_Quantity']列中,您可以看到更新的值

答案 1 :(得分:0)

这是一个简单的比例部门。您想影响public function buildForm(FormBuilderInterface $builder, array $options) { parent::buildForm($builder, $options); $builder ->add('photo', HiddenType::class, ['required' => false]) ->add('isSendDailyMail', CheckboxType::class, [ 'label' => false, 'required' => false, ]); } 的一部分,以尊重每个国家/地区:

  • 单个数量的总和必须等于Batch_Quantity
  • 单个数量必须与Batch_Quantity
  • 成比例

只需这样做:

Volume

这假设数据框中有一个批处理。如果可以有多个,则可以在df['%_Vol_allocated'] = (df.Volume / df.Volume.sum()) * 100 df['Quantity'] = df.Batch_Quantity * df['%_Vol_allocated'] / 100 上进行分组:

ProdBatchNo