группировать по строковому столбцу и столбцу datetime64 [ns] - PullRequest
1 голос
/ 09 июля 2020

У меня есть следующие данные, и я хотел бы знать: Кто был первым и последним клиентом, которого каждый день забирал водитель?

Данные

Вот как далеко я продвинулся:

#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 Ответ

0 голосов
/ 14 июля 2020

Вы можете сначала отсортировать по столбцу Start, который включает часы и минуты, чтобы обеспечить правильную сортировку нескольких событий одного дня для следующего шага. Сгруппируйте кадр по Driver, чтобы найти драйверы, забирающие каждый день.

Используя drop_duplicates, отбрасывайте повторяющиеся значения, используя флаг keep="first", чтобы сохранить только первые значения во время оценки, аналогично используйте keep="last" сохранить только последнее (из кластера повторяющихся значений). Это создаст уникальные даты для каждого водителя, первого и последнего для каждого дня, а затем используйте индекс этих дней в столбце Customer, чтобы получить имя клиента.

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)

Вывод от дн

         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
...
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...