![](/img/trans.png)
[英]Using Modules in Python, but can't seem to get the loop to display the distance the vehicle has traveled for each hour of a time period
[英]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 中添加了一个列,其中包含差异,在最后一行中,我按Who
和Vehicle
分组并在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.