Saya memiliki data berikut dan saya ingin tahu: Siapa pelanggan pertama dan terakhir yang dijemput oleh setiap Pengemudi setiap harinya?

Data

Ini adalah seberapa jauh saya baru saja:

#Import libraries

import pandas as pd
import numpy as np

#Open and clean the data
df = pd.read_csv('Data.csv')  
df = df.drop(['Cod'], axis=1)
df['Start'] = pd.to_datetime(df['Start'])
df['End'] = pd.to_datetime(df['End'])

#the following code is to respond the following question:
#Who was the first and last customer that each Driver picked-up for each day?
#link to access the data: https://drive.google.com/file/d/194byxNkgr2e9r-IOEmSuu9gpZyw27G7j/view?usp=sharing

unique_drivers = df['Driver'].value_counts()

for driver in unique_drivers: 
    d= vdf.groupby('Driver').get_group(driver) 
    time = d['Start'][0] 
    first_customer = d['Customer'][0] 
    end = d['End'][0] 
    last_customer = d['Customer'][-1] 
1
ricardocalleja 9 Juli 2020, 02:57

1 menjawab

Jawaban Terbaik

Anda dapat mengurutkan terlebih dahulu berdasarkan kolom Start yang menyertakan jam dan menit, memastikan bahwa beberapa acara hari yang sama diurutkan dengan benar untuk langkah berikutnya. Kelompokkan bingkai menurut Driver untuk menemukan driver mengambil untuk setiap hari.

Menggunakan drop_duplicates jatuhkan nilai berulang menggunakan tanda keep="first" untuk mempertahankan saja nilai pertama selama evaluasi, sama gunakan keep="last" untuk mempertahankan hanya yang terakhir (dari sekelompok nilai berulang). Ini akan menghasilkan tanggal unik untuk setiap pengemudi, pengambilan pertama dan yang terakhir untuk setiap hari, kemudian gunakan indeks dari hari-hari tersebut pada kolom Customer untuk mendapatkan nama pelanggan.

import pandas as pd

df = pd.read_csv("data.csv")
print(df)

# sort including HH:MM
df = df.sort_values("Start")

drivers_df = []
for gname, group in df.groupby("Driver"):
    dn = pd.DataFrame()

    # split to get date and time in two columns
    ts = group["Start"].str.split(expand=True)
    # remove duplicate days keeping the first occurance
    t_first = ts.drop_duplicates(subset=[0], keep="first")
    # remove duplicate days keeping the last occurance
    t_last = ts.drop_duplicates(subset=[0], keep="last")

    dn["Date"] = t_first[0]
    dn["Driver"] = gname
    dn["Num_Customers"] = ts[0].groupby(ts[0]).count().values
    # use the previous obtained indices over the "Customer" column
    dn["First_Customer"] = df.loc[t_first.index, "Customer"].values
    dn["Last_Customer"] = df.loc[t_last.index, "Customer"].values
    drivers_df.append(dn)

dn = pd.concat(drivers_df)
# remove to sort by driver's name
dn = dn.sort_values("Date")
dn = dn.reset_index(drop=True)
print(dn)

Keluaran dari dn

         Date             Driver  Num_Customers                 First_Customer                  Last_Customer
0   5/10/2020      Javier Pulgar              1   100998 - MARA MIRIAN BEATRIZ   100998 - MARA MIRIAN BEATRIZ
1   5/10/2020   Santiago Muruaga              1       103055 - ZANOTTO VALERIA       103055 - ZANOTTO VALERIA
2   5/10/2020   Martín Gutierrez              1  105645 - PAWLIW MARTA SOFI...  105645 - PAWLIW MARTA SOFI...
3   5/10/2020      Pablo Aguilar              2   102737 - GONZALVE DE ACEVEDO   102737 - GONZALVE DE ACEVEDO
4   5/10/2020      Carlos Medina              1       102750 - COOP.DE TRABAJO       102750 - COOP.DE TRABAJO
5   5/11/2020    Facundo Papaleo              6   101209 - FARMACIA NAZCA 2602           105093 - BIO HERLPER
6   5/11/2020  Franco Chiarrappa             15  100288 - SAVINI LUCIANA MARIA       102690 - GIOIA ELIZABETH
7   5/11/2020     Hernán Navarro             14  106367 - FARMACIA BERAPHAR...      102631 - SPALVIERI MARINA
8   5/11/2020      Pablo Aguilar              9       102510 - CAZADORFARM SCS       101482 - JOAQUIN MARCIAL
9   5/11/2020      Daniel Godino              7  103572 - GIRALDEZ ALICIA OLGA  103363 - CADELLI ROBERTO JOSE
10  5/11/2020     Hernán Urquiza              1  105323 - GARCIA GERMAN REI...  105323 - GARCIA GERMAN REI...
11  5/11/2020     Héctor Naselli             19      103545 - FARMACIA DESANTI    102257 - FARMA NUOVA S.C.S.
12  5/11/2020   Santiago Muruaga             12       101735 - ALEGRE LEONARDO       500014 - Drogueria DIMEC
13  5/11/2020      Javier Pulgar              2     101009 - MIGUEL ANGEL MARA  103462 - DRAGONE CARLOS AL...
14  5/11/2020   Atilano Aguilera              1        104003 - FARMACIA SANTA        104003 - FARMACIA SANTA
15  5/11/2020            Muletto              3    101359 - FARMACIA COSENTINO        105886 - NEGRI GREGORIO
16  5/11/2020   Martín Venturino              8  102587 - JANISZEWSKI MATIL...      102672 - BORSOTTI GUSTAVO
17  5/11/2020   Martín Gutierrez              1  105645 - PAWLIW MARTA SOFI...  105645 - PAWLIW MARTA SOFI...
18  5/11/2020      José Vallejos             13  102229 - LANDRIEL MARIA LO...  105721 - SOSA NANCY EDITH ...
19  5/11/2020    Edgardo Andrade              9        101524 - FARMACIA M Y A         101217 - MARISA TESORO
20  5/11/2020      Carlos Medina             14   105126 - QUISPE MURILLO RODY  100538 - MAXIMILIANO CAMPO...
21  5/11/2020     Javier Torales              1     200666 - CLINICA BOEDO SRL     200666 - CLINICA BOEDO SRL
22  5/12/2020     Hernán Urquiza              8  105293 - BENSAK MARIA EUGENIA     103005 - BONVISSUTO SANDRA
23  5/12/2020     Miguel Quilici             17         102918 - BRITO NICOLAS         102533 - SAMPEDRO PURA
...
...
0
n1colas.m 14 Juli 2020, 02:41