2016-09-30 4 views
0

Ich habe einen SFrame mit den Spalten Date1 und Date2.Mit .apply() in Sframes, um mehrere Spalten jeder Zeile zu bearbeiten

Ich versuche .apply() zu verwenden, um den datediff zwischen Date1 und Date2 zu finden, aber ich kann nicht herausfinden, wie man das andere Argument benutzt.

Idealerweise so etwas wie

frame['new_col'] = frame['Date1'].apply(lambda x: datediff(x,frame('Date2'))) 
+0

Sie suchen nach Unterschied in Tagen? – sb0709

+0

Ja. Versuchen Sie jedoch, die Iteration zu vermeiden und stattdessen die Funktion .apply() zu verwenden. – javsckc

+0

'frame ['Date1'] - frame ['Date2']' funktioniert nicht? – Abdou

Antwort

0

Sie direkt den Unterschied zwischen den Daten in Spalte Date2 und die in Date1 nur durch Subtraktion frame['Date1'] von frame['Date2'] nehmen. Das, aus irgendeinem Grunde gibt die Anzahl der Sekunden zwischen den beiden Daten (nur mit Python datetime Objekten getestet), die Sie in Anzahl der Tage mit einfachen arithmetics umwandeln können:

from sframe import SFrame 
from datetime import datetime, timedelta 

mydict = {'Date1':[datetime.now(), datetime.now()+timedelta(2)], 
      'Date2':[datetime.now()+timedelta(10), datetime.now()+timedelta(17)]} 
frame = SFrame(mydict) 
frame['new_col'] = (frame['Date2'] - frame['Date1']).apply(lambda x: x//(60*60*24)) 

Ausgang:

+----------------------------+----------------------------+---------+ 
|   Date1   |   Date2   | new_col | 
+----------------------------+----------------------------+---------+ 
| 2016-10-02 21:12:14.712556 | 2016-10-12 21:12:14.712574 | 10.0 | 
| 2016-10-04 21:12:14.712567 | 2016-10-19 21:12:14.712576 | 15.0 | 
+----------------------------+----------------------------+---------+ 
+0

Danke! Ich weiß, es klingt albern, aber das ist mir nicht in den Sinn gekommen ... – javsckc

Verwandte Themen