Добавление метки времени в минуты - PullRequest
1 голос
/ 17 мая 2019

У меня есть DataFrame df с 200 строками. Первые несколько строк выглядят следующим образом:

+--------------+----------+----------------+
|Customer name | Arrival  | Actual Arrival | 
+--------------+----------+----------------+
| Customer 21  |       20 |                |
| Customer 22  |       30 |                |  
| Customer 23  |       20 |                | 
| Customer 24  |       10 |                |  
| Customer 25  |       20 |                | 
+--------------+----------+----------------+

В столбце «Прибытие» указывается минутное время прибытия с момента начала. Поэтому я хочу создать столбец «Фактическое прибытие», добавив фиксированную метку времени (время начала) к значениям столбца «Прибытие». Например: если время начала 07:00;

+--------------+----------+----------------+
|Customer name | Arrival  | Actual Arrival | 
+--------------+----------+----------------+
| Customer 21  |       20 |    07:20       |
| Customer 22  |       30 |    07:30       |  
| Customer 23  |       20 |    07:20       | 
| Customer 24  |       10 |    07:10       |  
| Customer 25  |       60 |    08:00       | 
+--------------+----------+----------------+

Как это сделать в Python ??

Ответы [ 3 ]

1 голос
/ 17 мая 2019

Можете ли вы попробовать следующее:

import datetime
actual_start_time = datetime.time(7, 0)
start_time = datetime.datetime.combine(datetime.datetime.today().date(), actual_start_time)
df['Actual Arrival'] = df['Arrival'].apply(lambda x: start_time + datetime.timedelta(minutes=x))

Пример:

>>> df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]]).T
>>> df.columns = ['name', 'Arrival']
>>> df
   name  Arrival
0     1        5
1     2        6
2     3        7
3     4        8
>>> start_time = datetime.datetime.strptime('2019-05-17 7:0:0', '%Y-%m-%d %H:%M:%S')
>>> df['Actual Arrival'] = df['Arrival'].apply(lambda x: start_time + datetime.timedelta(minutes=x))
>>> df
   name  Arrival      Actual Arrival
0     1        5 2019-05-17 07:05:00
1     2        6 2019-05-17 07:06:00
2     3        7 2019-05-17 07:07:00
3     4        8 2019-05-17 07:08:00

Если вы хотите только время, вы можете сделать следующее:

>>> df['Actual Arrival'] = df['Arrival'].apply(lambda x: (start_time + datetime.timedelta(minutes=x)).time())
>>> df
   name  Arrival Actual Arrival
0     1        5       07:05:00
1     2        6       07:06:00
2     3        7       07:07:00
3     4        8       07:08:00
0 голосов
/ 17 мая 2019
import datetime
data = {'customers': {0: 'Customer 21',
  1: 'Customer 22',
  2: 'Customer 23',
  3: 'Customer 24',
  4: 'Customer 25'},
 'arrival': {0: 20, 1: 30, 2: 20, 3: 10, 4: 60}}

df = pd.DataFrame(data)

df['actual arrival'] = df.arrival.apply(lambda x:(pd.to_datetime(datetime.datetime.today().date())+pd.offsets.Timedelta(hours=7,minutes=x)).strftime('%H:%M'))

enter image description here

0 голосов
/ 17 мая 2019

Попробуйте, если вы хотите использовать только time() для базового времени:

import datetime
arrival = 20
base = datetime.time(7, 0, 0)  # 07:00:00 or whatever your base time is.
actual_arrival = datetime.time(base.hour, base.minute + arrival, base.second)

Это выводит:

07:20:00

РЕДАКТИРОВАТЬ: Примечаниечто в подходе выше аргументы time() должны быть действительными, и если ваша минута станет больше 59, она не будет работать.В качестве обходного пути вы можете определить вспомогательную функцию для этого:

def add_times(op1, op2):  # two tuples in this format: (h, m, s)
    hour = op1[0] + op2[0]
    minute = op1[1] + op2[1]
    second = op1[2] + op2[2]

    if second >= 60:
        minute += 1
        second -= 60

    if minute >= 60:
        hour += 1
        minute -= 60

    if hour >= 24:
        hour -= 24

    return (hour, minute, second)

и изменить код на:

base_time = (7, 0, 0)  # (hour, minute, seconds)
base = datetime.time(*base_time)  # If you want to have it as a time object in your code. It is redundant now.
actual_arrival = datetime.time(*add_times(base_time, (0, 20, 0)))

Но я думаю, что это уже не datetime подходчтобы решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...