将各个数据帧值除以数据集中的相应值

2024-05-15 05:46:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个CVRP,我有一个车队列表,每个车队由一个同质车型组成,以及每个车队中应该包含的货物数量。相应的数据帧如下所示:

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

由于每个车队都由一个单一的车辆类型组成,因此我想找出维修该数量车辆所需的车辆数量。也就是说,我想将车队拥有的货物数量除以每辆车所能容纳的相应数量,四舍五入,这样我就可以准确地知道有多少辆车处于活动状态。容量值位于索引数据[“transportation_data”][“vehicle_capacity”]下的同一个.json文件中,我一直使用该文件向模型的其他部分提供数据,其中关联的字典如下所示:

"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)

然而,当我尝试这个方法时,我收到一个错误,上面写着UnhableType:“Series”。我也尝试过

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

但是我继续收到一个错误,这个是“Series”对象,没有“Vehicle”属性。我已经阅读了一些文档,也没有发现任何与此相关的内容。感谢您的帮助,谢谢


Tags: 数据dfdata数量v3quantityv2v1
2条回答

我认为问题在于你访问数据的方式,特别是“x.Quantity\u Employeed”的方式。这是可行的,因此问题可能出在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

相关问题 更多 >

    热门问题