2017-03-25 4 views
1

ich in einer csv in einen Datenrahmen wie diese gelesen haben:Unterschied in den Werten von zwei Spalten in eine Spalte

import pandas as pd 

data = pd.read_csv('mydata.csv', encoding = 'ISO-8859-1') 

und die Datenrahmen sieht wie folgt aus:

first_time  second_time 

1 11/2/17 0:05 11/2/17 0:09 

2 12/2/17 0:40 12/2/17 0:17 

3 13/2/17 0:12 13/2/17 1:40 

Und ich möchte machen Sie eine neue Spalte namens duration, die die Dauer (Minuten) der beiden Spalten in jeder Zeile findet:

first_time  second_time duration 

1 11/2/17 0:05 11/2/17 0:09 4 

2 12/2/17 0:40 12/2/17 0:47 7 

3 13/2/17 0:12 13/2/17 1:40 88 

Wie könnte ich das effizient machen? Normalerweise würde ich versuchen, das Datum zu analysieren und die Zeitwerte zu extrahieren, aber das scheint nicht sehr effizient zu sein.

Antwort

2

Sie können nur in Datetime-Typ umwandeln und das Delta in wenigen Minuten berechnen:

import pandas as pd 

data = pd.DataFrame({'first_time': ['11/2/17 0:05', '12/2/17 0:40', '13/2/17 0:12'], 
        'second_time': ['11/2/17 0:09', '12/2/17 0:47', '13/2/17 1:40']}) 

data['duration'] = pd.to_datetime(data['second_time']) - pd.to_datetime(data['first_time']) 
data['duration'] = data['duration'].astype('timedelta64[m]') 

Welche geben:

 first_time second_time duration 
0 11/2/17 0:05 11/2/17 0:09  4.0 
1 12/2/17 0:40 12/2/17 0:47  7.0 
2 13/2/17 0:12 13/2/17 1:40  88.0 
+0

Danke Sir! Wenn die erste Zeit "31/1/16 23: 43" ist und die zweite Zeit "1/2/16 0: 06" ist, würde dies eine negative Antwort ergeben. Ist das ein Weg, das zu beheben und nur positive Zeiten zu haben? – RoadRunner

+1

Keine Sorge, ich habe 'format = '% d /% m /% y% H:% M'' in die 'to_datetime()' Aufrufe eingefügt, und es funktioniert jetzt gut. Danke noch einmal :) – RoadRunner

Verwandte Themen