![](/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.