2017-02-03 1 views
0

Tage Ich habe einen Datensatz von Transaktionsdaten, wo viele Transaktionen jeden Tag auftreten können, aber nicht alle Tage Transaktionen haben. Ich möchte für jede Transaktion die Anzahl der Tage seit dem nächsten Tag in der Vergangenheit (mit Ausnahme des aktuellen Tages) mit einer Transaktion berechnen.Tage aus dem vorherigen Datum in Transaktionsdaten mit Pandas

from StringIO import StringIO 

import pandas as pd 

TESTDATA=StringIO("""time,message 
2015-02-01,x 
2015-02-01,z 
2015-02-02,x 
2015-02-04,y 
2015-02-04,z 
""") 

s = pd.read_csv(TESTDATA, sep=",",parse_dates=[0]) 

Was ich will, ist:

2015-02-01,x,nan 
2015-02-01,z,nan 
2015-02-02,x,1 
2015-02-04,y,2 
2015-02-04,z,2 
+1

Das kann ich nicht testen, aber ich glaube, Sie pd.merge_asof verwenden können. Vielleicht kann sich jemand anderes damit herumschlagen und eine Antwort geben – piRSquared

+0

@piRSquared richtig :) – Boud

Antwort

2

Mit merge_asof:

s['time2'] = s['time'] 
df = pd.merge_asof(s, s, left_on='time', right_on='time', allow_exact_matches=False) 
df 
Out[328]: 
     time message_x time2_x message_y time2_y 
0 2015-02-01   x 2015-02-01  NaN  NaT 
1 2015-02-01   z 2015-02-01  NaN  NaT 
2 2015-02-02   x 2015-02-02   z 2015-02-01 
3 2015-02-04   y 2015-02-04   x 2015-02-02 
4 2015-02-04   z 2015-02-04   x 2015-02-02 

df.time - df.time2_y 
Out[330]: 
0  NaT 
1  NaT 
2 1 days 
3 2 days 
4 2 days 
dtype: timedelta64[ns] 
+0

Genau das habe ich mir vorgestellt. Das Beantworten von Fragen auf meinem Telefon ist das Schlimmste. – piRSquared

+0

@piRSquared Ich habe das aufgegeben, nur lesen, upvote, Kommentare, Tippfehler. – Boud

Verwandte Themen