繁体   English   中英

计算每个人在每辆车上行驶的公里数

[英]Calculate the amount of km traveled by each person in each vehicle

我有来自大约 40 辆车的车队的大量里程表值,由不同的人驾驶,但在下面的示例中,我保持简单。

我已将所有内容导入 pandas,在我的里程表值旁边,当里程表日志事件被触发时,我有谁在驾驶车辆(通常他们会每公里触发一次,但有时触发更多,有时触发更少)

现在我需要计算出车辆 X 行驶的公里数,而 Y 人在方向盘后面,但我不确定如何。


matrix = [(1, '501', "Me"),
         (1, '502', "Me"),
         (1, '502', "Wife"),
         (1, '503', "Wife"),
         (1, '504', "Wife"),
         (1, '505', "Wife"),
         (1, '506', "Wife"),
         (1, '507', "Wife"),
         (1, '508', "Wife"),
         (1, '509', "Me"),
         (1, '510', "Me"),
         (1, '511', "Me"),
         (1, '512', "Me"),
         (1, '520', "Wife"),
         (1, '522', "Me"),
         (1, '523', "Me"),
         (1, '524', "Me"),
         (1, '524', "Me"),
         (1, '524', "Me"),
         (1, '524', "Me"),
         (1, '525', "Me"),
         (2, '126', "Me"),
         (2, '127', "Me"),
         (2, '128', "Me"),
         (2, '129', "Me"),
         ]

# Create a DataFrame object
dfObj = pd.DataFrame(matrix, columns=['Vehicle', 'ODOmeter', 'Who'])

print (dfObj)

print ("\nVehicle 1 have driven 10 km with Me behind the wheel\nand 14 km with Wife behind the wheel\nVehicle 2 have driven 3 km with me behind the wheel")

复制并粘贴答案

这里有一个 function 来计算和打印所需的 output:

def print_kilometers(dfObj):
    dfObj['ODOmeter'] = dfObj['ODOmeter'].astype(float)
    dfObj["diff"]= dfObj.groupby("Vehicle")["ODOmeter"].diff()
    sum_km = dfObj.groupby(["Who", "Vehicle"])["diff"].sum()

    for i, v in sum_km.items():
       print("Vehicle {} have driven {} km with {} behind the wheel".format(i[1], v, i[0]))

解释

如果我理解你的问题,你可以简单地计算车辆公里数之间的差异,并使用由 pandas 提供的groupby pandas 以您的 dataframe 为例,您可以执行以下操作:

dfObj['ODOmeter'] = dfObj['ODOmeter'].astype(float)
dfObj["diff"]= dfObj.groupby("Vehicle")["ODOmeter"].diff()
sum_km = dfObj.groupby(["Who", "Vehicle"])["diff"].sum()

在第一行中,我将ODOmeter列转换为浮动,(如果公里只能是 integer 值,您可以切换到 int),在第二行中,我在 dataframe 中添加了一个列,其中包含差异,在最后一行中,我按WhoVehicle分组并在diff列上求和。 您可以循环并打印结果:

for i, v in sum_km.items():
    print("Vehicle {} have driven {} km with {} behind the wheel".format(i[1], v, i[0]))

首先,您需要将里程表转换为正确的类型:

dfObj['ODOmeter'] = dfObj['ODOmeter'].astype(int)

然后计算每辆车的两个里程表数据点之间的差异,为您提供行程表

dfObj['Tripmeter'] = dfObj.groupby('Vehicle')['ODOmeter'].diff()

然后简单地将每个车辆和人员的行程表相加

dfObj.groupby(['Vehicle', 'Who'])["Tripmeter"].sum()
# Vehicle  Who 
# 1        Me      10.0
#          Wife    14.0
# 2        Me       3.0
# Name: ODOmeter, dtype: float64

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM