我正在研究一种CVRP,我已经有了一份车队清单,每个车队都是由一种相同的车辆类型组成的,以及每个车队应该拥有的货物数量。相应的dataframe看起来如下:
Vehicle Quantity of Goods
v1 8.0
v2 12.0
v3 16.0
v4 12.0由于每支车队都是由一个单一类型的车辆组成的,我想找出服务这个数量所需的车辆数目。也就是说,我想将车队拥有的货物数量除以每辆车能容纳的相应数量,使我确切地知道有多少辆车在活动。容量值位于我一直用于向模型的其他部分提供数据的同一个.json文件中,在索引数据“transportation_data”下,关联的字典如下:
"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)然而,当我尝试这样做的时候,我会收到一个错误,上面写的是不可理解的类型:“系列”。我也试过
df = df.apply(lambda x: x.Quantity_Employed / data["transportation_data"]["vehicle_capacity"][x.Vehicles], axis =1)但是我继续收到一个错误,这个是'Series‘对象,没有属性'Vehicle.’‘。我已经阅读了一些文档,也没有发现任何类似的东西。任何帮助都是感激的,谢谢!
发布于 2021-08-24 17:03:26
我认为问题在于您访问数据的方式,特别是使用"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)发布于 2021-08-24 17:04:53
取决于你的数据。也许..。
# 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.0https://stackoverflow.com/questions/68910952
复制相似问题