将单个Pandas数据框的值除以数据集中相应的值



我正在制作一个CVRP,并且已经得到了一个车队列表,其中每个车队由相同的车辆类型组成,以及每个车队中应该包含的货物数量。对应的数据框如下所示:

Vehicle               Quantity of Goods
v1                     8.0
v2                    12.0
v3                    16.0
v4                    12.0

由于每个车队都由一种车辆类型组成,我想要找到服务该数量所需的车辆数量。也就是说,我想用车队的货物数量除以每辆车所能容纳的相应数量,四舍五入,这样我就能确切地知道有多少辆车是活跃的。容量值可以在我用来向模型的其他部分提供数据的相同.json文件中找到,在索引数据["transportation_data"]["vehicle_capacity"]下,其中关联的字典如下:

"vehicle_capacity": {
"v1": 8,
"v2": 6,
"v3": 4,
"v4": 3
}

例如,我想用v1的量除以8,剩下1辆车,或者用v2的量除以6,剩下2辆车。到目前为止我尝试过的一件事是

df = df.apply(lambda x: x.Quantity_Employed / data["transportation_data"]["vehicle_capacity"][x], axis =1)

然而,当我尝试这样做时,我收到一个错误说不可哈希类型:"Series."我也试过

df = df.apply(lambda x: x.Quantity_Employed / data["transportation_data"]["vehicle_capacity"][x.Vehicles], axis =1)

但是我继续收到一个错误,这个是"系列"对象没有属性"车辆"。我通读了一下文档,也没有发现任何类似的东西。任何帮助都很感激,谢谢!

我认为问题在于您访问数据的方式,特别是使用"x.Quantity_Employed"。这是有效的,所以问题可能在lambda函数中:

import pandas as pd
capacity = {'v1' : 8, 'v2' : 12, 'v3' : 16, 'v4' : 12}
df = pd.DataFrame({'vehicle' : ['v1', 'v2', 'v3', 'v4'], 'quantity' : [8, 6, 4, 3]})
f = lambda x: capacity[x['vehicle']] / x['quantity'] 
df.loc[:, 'result'] = df.apply(f, axis=1)

取决于你的数据。也许…

# frame
df = pd.DataFrame({'Vehicle': {0: 'v1', 1: 'v2', 2: 'v3', 3: 'v4'},
'Quantity of Goods': {0: 8.0, 1: 12.0, 2: 16.0, 3: 12.0}})
Vehicle  Quantity of Goods
0      v1                8.0
1      v2               12.0
2      v3               16.0
3      v4               12.0

然后……

# dictionary of capacity
vehicle_capacity = {
"v1": 8,
"v2": 6,
"v3": 4,
"v4": 3
}
df['needed'] = df['Quantity of Goods'].div(df['Vehicle'].map(vehicle_capacity))
print(df)
Vehicle  Quantity of Goods  needed
0      v1                8.0     1.0
1      v2               12.0     2.0
2      v3               16.0     4.0
3      v4               12.0     4.0

附加:

四舍五入:

import numpy as np
df['needed'] = df['Quantity of Goods'].div(df['Vehicle'].map(vehicle_capacity)).apply(np.ceil)
print(df)
Vehicle  Quantity of Goods  needed
0      v1                8.1     2.0
1      v2               12.0     2.0
2      v3               16.0     4.0
3      v4               12.0     4.0

最新更新