Как добавить один час от времени начала до времени начала следующего дня, используя panda python - PullRequest
1 голос
/ 23 мая 2019

Здесь у меня есть CSV-файл с данными.Я хочу написать код, который запускается со времени первого столбца времени CSV-файла, и он будет равен 0. Затем с того времени добавьте один час один час до времени начала следующего дня.Затем после этого снова это время становится равным 0 и добавляется один час один час до времени начала следующего дня.Этот процесс продолжается.

time_interval = 3600 (in seconds)
date_array = []
date_array.append(pd.to_datetime(data['date'][0]).date())
start_time = []
end_time   = []
temp_date  = pd.to_datetime(data['date'][0]).date()
start_time=0
for i in range(len(data['date'])):
 cur_date = pd.to_datetime(data['date'][i]).date()
 if( cur_date > temp_date):
    end_time.append(pd.to_datetime(data['time'][i-1], format='%H:%M:%S').time())
    start_time=0
    date_array.append(cur_date)
    temp_date = cur_date
end_time.append(pd.to_datetime(data['time'][len(data['date'])-1], format='%H:%M:%S').time())
datetime_array = []
for i in range(len(date_array)):
  s_time = start_time
  e_time = datetime.datetime.combine(date_array[i],  end_time[i])
print(datetime_array)

Я не получил ответа, который хочу.Здесь я включаю мой CSV-файл.enter image description here

enter image description here

Ответы [ 2 ]

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

Это то, что вы ищете

import pandas as pd

df = pd.DataFrame([
    ["10/3/2018"],
["10/3/2018"],
["10/3/2018"],
["10/3/2018"],
["10/3/2018"],
["10/3/2018"],
["10/4/2018"],
["10/4/2018"],
["10/4/2018"],
["10/4/2018"],
],columns=['date'])

df['date'] =  pd.to_datetime(df['date'], format='%d/%m/%Y')
start_time = '6:00:00'
df.loc[:,'time'] = start_time
increment = df.groupby(['date', 'time']).cumcount().astype('timedelta64[h]')
df.loc[:,'time'] = pd.to_timedelta(df.loc[:,'time'])
df['time'] =  df['time'] + increment

выход

        date     time
0 2018-03-10 06:00:00
1 2018-03-10 07:00:00
2 2018-03-10 08:00:00
3 2018-03-10 09:00:00
4 2018-03-10 10:00:00
5 2018-03-10 11:00:00
6 2018-04-10 06:00:00
7 2018-04-10 07:00:00
8 2018-04-10 08:00:00
9 2018-04-10 09:00:00
0 голосов
/ 23 мая 2019

Вы можете создать новый столбец, заполненный датами, а затем получить первое значение в днях с GroupBy.transform для вычитания с датами, последним преобразованием времени в делах на Series.dt.total_seconds, а затем в минуты :

df = pd.DataFrame({
        'date':['10/3/2018'] * 5 + ['10/4/2018'],
        'time':['6:00:00','7:00:00','8:00:00','9:00:00','10:00:00','6:00:00'],
        'col':[4,8,9,4,2,3],

})

df['datetime'] =  pd.to_datetime(df['date'] + df['time'], format='%d/%m/%Y%H:%M:%S')
first = df.groupby('date')['datetime'].transform('first')
df['new'] = df['datetime'].sub(first).dt.total_seconds().div(60).astype(int)
print (df)

        date      time  col            datetime  new
0  10/3/2018   6:00:00    4 2018-03-10 06:00:00    0
1  10/3/2018   7:00:00    8 2018-03-10 07:00:00   60
2  10/3/2018   8:00:00    9 2018-03-10 08:00:00  120
3  10/3/2018   9:00:00    4 2018-03-10 09:00:00  180
4  10/3/2018  10:00:00    2 2018-03-10 10:00:00  240
5  10/4/2018   6:00:00    3 2018-04-10 06:00:00    0

Detail :

print (first)
0   2018-03-10 06:00:00
1   2018-03-10 06:00:00
2   2018-03-10 06:00:00
3   2018-03-10 06:00:00
4   2018-03-10 06:00:00
5   2018-04-10 06:00:00
Name: datetime, dtype: datetime64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...