2017-10-03 1 views
0

J'ai des données de transaction avec des horodatages entre les factures pour les clients. . Je suis en train de calcualte les jours en moyenne entre deux factures uniques (par « ServicedOn ») Deux mises en garde pour ceux-ci sont:Comment puis-je obtenir les jours moyens entre les horodatages des pandas?

  • Une facture unique peut avoir plusieurs lignes avec différentes horodatages (car ils peuvent être entretenus sur au des moments différents).
  • L'horodatage a également des valeurs de temps, donc je ne peux pas utiliser la méthode diff() pour calculer les jours delta.

Le dataframe regarde comme tel:

InvoiceNo SoldOn ServicedOn ItemType ItemCode GuestId FinalSalePrice FirstVisit Package BUName SalePrice Merchant_id 
21312 4/26/2015 12:55:12 PM 4/26/2015 8:00:00 AM 0 SER-310-008 5a531810-9413-4091-acd5-424d125b0c9e 3089.9 No No Package Spa 2500 POW 
31639 1153 6/12/2015 7:11:22 PM 6/12/2015 6:15:00 PM 0 SER-1257-008 5a531810-9413-4091-acd5-424d125b0c9e 5700.0 No No Package Spa 5000 POW 
42492 73 5/15/2015 8:05:50 PM 5/15/2015 8:05:50 PM 2 ITM-3407-001 5a531810-9413-4091-acd5-424d125b0c9e 1600.0 No No Package Default 1422 POW 
42493 73 5/15/2015 8:06:08 PM 5/15/2015 8:06:08 PM 2 ITM-3175-001 5a531810-9413-4091-acd5-424d125b0c9e 2750.0 No No Package Default 2444 POW 
42494 73 5/15/2015 8:05:38 PM 5/15/2015 8:05:38 PM 2 ITM-4340-001 5a531810-9413-4091-acd5-424d125b0c9e 575.0 No No Package Default 511 POW 

Je ne suis pas sûr sur la façon de procéder, ce serait apprecaited toute orientation!

+0

Pour clarifier ce que vous Demandez, s'il vous plaît fournir ce que vous pensez que les résultats devraient être en tenant compte de vos données d'échantillon. – piRSquared

+0

Idéalement, pour chaque facture unique, je regarde le premier horodatage ServicedOn et calcule les jours jusqu'au premier horodatage ServicedOn de la prochaine facture. –

+0

Pour Ex: à la facture no. 21312 Je regarde le premier servicedOn (26/04/2015) et calcule les jours jusqu'à la facture no. Premier servicedON 31639 (6/12/2015). –

Répondre

0

Faire ce que vous voulez sur tous les numéros de facture est assez facile. Si la première ServicedOn est ce que vous allez, vous pouvez trier, puis utilisez groupby et head pour obtenir la première date pour chaque InvoiceNo, puis sélectionnez la colonne et calculer la différence moyenne:

mean_difference = (df.sort_values(by='ServicedOn') # Get everything in date order 
        .groupby('InvoiceNo') # group by invoice 
        .head(1) # take first of each group 
        .ServicedOn # only look at ServicedOn value 
        .diff() # take differences 
        .mean()) # calculate mean 
+0

Un gros problème est que les pandas ne calculent pas la différence pour la colonne ServicedOn et ne lancent pas l'erreur d'opérande "str". –

+0

Cela signifie que votre colonne ServicedOn n'a pas été analysée en tant que datetime. – chthonicdaemon

+0

Lorsque je saisis les données de transaction, dois-je effectuer l'entretien uniquement sur une colonne datetime? Merci! –