2017-10-03 1 views
0

Ich habe Transaktionsdaten mit Zeitstempeln zwischen Rechnungen für Kunden. . Ich versuche, die durchschnittliche Anzahl der Tage zwischen zwei einzigartigen Rechnungen calcualte (von ‚ServicedOn‘) Zwei Vorbehalte für diese sind:Wie kann ich die durchschnittlichen Tage zwischen Zeitmarken in Pandas erhalten?

  • Eine eindeutige Rechnung mehrere Zeilen mit unterschiedlichen Zeitstempel haben kann (wie sie auf bedient werden können, bei andere Zeiten).
  • Der Zeitstempel hat auch Zeitwerte, daher kann ich die Methode diff() nicht verwenden, um die Delta-Tage zu berechnen.

Der Datenrahmen sieht aus, als solche:

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 

Ich bin nicht sicher, wie es weitergehen, so würde jede Führung apprecaited werden!

+0

Um zu klären, was Sie Fragen Sie bitte, was Sie denken, die Ergebnisse sollten Ihre Stichprobendaten berücksichtigen. – piRSquared

+0

Im Idealfall würde ich für jede einzelne Rechnung den ersten ServicedOn-Zeitstempel betrachten und die Tage bis zum nächsten ServicedOn-Zeitstempel der nächsten Rechnung berechnen. –

+0

Für zB: auf Rechnung Nr. 21312 Ich würde mir den ersten servicedOn (4/26/2015) anschauen und die Tage bis zur Rechnungsnummer berechnen. 31639s erstes servicedON (6/12/2015). –

Antwort

0

Um zu tun, was Sie über alle Rechnungsnummern wollen, ist ziemlich einfach. Wenn die erste ServicedOn ist das, was Sie gehen, können Sie sortieren, dann verwenden groupby und head das erste Datum für jeden InvoiceNo zu bekommen, dann die Spalte auswählen und die mittlere Differenz berechnen:

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

Ein großes Problem ist, dass Pandas nicht den Unterschied für die ServicedOn-Spalte berechnet und den nicht unterstützten Operandenfehler "str" ​​wirft. –

+0

Das bedeutet, dass Ihre ServicedOn-Spalte nicht als Datetime analysiert wurde. – chthonicdaemon

+0

Wenn ich die Transaktionsdaten eingegeben habe, soll ich dann ausschließlich eine Datetime-Spalte bearbeiten? Vielen Dank! –

Verwandte Themen