簡體   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