Ну, все это своего рода зависит от формата времени вы используете , Я бы рекомендовал использовать datetime.
Если in_time
и out_time
в настоящее время строки, конвертировать их с datetime.strptime()
:
from datetime import datetime
f = lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%fZ')
df.in_time = df.in_time.apply(f)
df.out_time = df.out_time.apply(f)
, а затем вы можете просто вычесть их, и присвоить результат в новый столбец с именем «дней»:
df['days'] = df.out_time - df.in_time
Пример: (разницы в 3 секунды и 1 день)
In[5]: df = pd.DataFrame({'in_time':['2015-09-25T01:45:34.372Z','2015-09-25T01:45:34.372Z'],
'out_time':['2015-09-25T01:45:37.372Z','2015-09-26T01:45:34.372Z']})
In[6]: df
Out[6]:
in_time out_time
0 2015-09-25T01:45:34.372Z 2015-09-25T01:45:37.372Z
1 2015-09-25T01:45:34.372Z 2015-09-26T01:45:34.372Z
In[7]: type(df.loc[0,'in_time'])
Out[7]: str
In[8]: df.in_time = df.in_time.apply(lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%fZ'))
In[9]: df.out_time = df.out_time.apply(lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%fZ'))
In[10]: df # notice that it looks exactly the same, but the type is different
Out[10]:
in_time out_time
0 2015-09-25 01:45:34.372 2015-09-25T01:45:37.372Z
1 2015-09-25 01:45:34.372 2015-09-26T01:45:34.372Z
In[11]: type(df.loc[0,'in_time'])
Out[11]: pandas.tslib.Timestamp
И создание нового столбца:
In[12]: df['days'] = df.out_time - df.in_time
In[13]: df
Out[13]:
in_time out_time days
0 2015-09-25 01:45:34.372 2015-09-25 01:45:37.372 0 days 00:00:03
1 2015-09-25 01:45:34.372 2015-09-26 01:45:34.372 1 days 00:00:00
Теперь вы можете играть с форматом вывода. Например, часть разницы секунд:
In[14]: df.days = df.days.apply(lambda x: x.total_seconds()/60)
In[15]: df
Out[15]:
in_time out_time days
0 2015-09-25 01:45:34.372 2015-09-25 01:45:37.372 0.05
1 2015-09-25 01:45:34.372 2015-09-26 01:45:34.372 1440.00
Примечание: Что касается формата in_time
и out_time
, заметьте, что я сделал некоторые предположения (например, что вы используете 24H часы (таким образом, используя %H
и не %I
)). Чтобы играть в формате, смотрите: strptime()
documentation.
Примечание2: Очевидно, было бы лучше, если вы можете создать свою программу, чтобы использовать datetime
с самого начала (вместо использования строк и их преобразования).
Возможный дубликат [Вычисление разницы между временными интервалами между двумя столбцами в часах и минутах] (http://stackoverflow.com/questions/22923775/calculate-pandas-dataframe-time-difference-between-two-columns-in -hours-и-minu) – Filly
Моя проблема отличается от вашей, у меня много столбцов, и мне нужно увеличить еще одну колонку в названии дней и поместить там различия. –