我正在制作一个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