我什么都没有生成数据集。 假设我的数据如下:
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。
对不起,我不太擅长解释我要寻找的东西。 有人在跟着我吗? 谢谢:)
答案 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