Как заменить временную метку по столбцам с помощью панд - PullRequest
1 голос
/ 26 сентября 2019
df = pd.DataFrame({
 'subject_id':[1,1,2,2],
 'time_1':['2173/04/11 12:35:00','2173/04/12 12:50:00','2173/04/11 12:59:00','2173/04/12 13:14:00'],
 'time_2':['2173/04/12 16:35:00','2173/04/13 18:50:00','2173/04/13 22:59:00','2173/04/21 17:14:00'],
  'val' :[5,5,40,40],
  'iid' :[12,12,12,12]   
 })
df['time_1'] = pd.to_datetime(df['time_1'])
df['time_2'] = pd.to_datetime(df['time_2'])
df['day'] = df['time_1'].dt.day

В настоящее время мой фрейм данных выглядит так, как показано ниже

enter image description here

Я хочу заменить метку времени в столбце time_1 на 00:00:00 и time_2 столбец в 23:59:00

Это то, что я пробовал, но оно не работает

df.groupby(df['subject_id'])['time_1'].apply(lambda x: pd.datetime.strftime(x, "%H:%M:%S") == "00:00:00")   #approach 1

df.groupby(df['subject_id'])['time_1'].apply(lambda x: pd.pd.Timestamp(hour = '00', second = '00')) #approach 2

Я ожидаю, что мой выходной кадр данных будет таким, как показано ниже

enter image description here

1 Ответ

1 голос
/ 26 сентября 2019

Я панда, если все даты имеют 00:00:00 раз в одном столбце, то не отображают его.

Используйте Series.dt.floor или Series.str.normalize для удаленияи для второго добавить DateOffset:

df['time_1'] = pd.to_datetime(df['time_1']).dt.floor('d')
#alternative
#df['time_1'] = pd.to_datetime(df['time_1']).dt.normalize()
df['time_2']=pd.to_datetime(df['time_2']).dt.floor('d') + pd.DateOffset(hours=23, minutes=59)
df['day'] = df['time_1'].dt.day

print (df)
   subject_id     time_1              time_2  val  iid  day
0           1 2173-04-11 2173-04-12 23:59:00    5   12   11
1           1 2173-04-12 2173-04-13 23:59:00    5   12   12
2           2 2173-04-11 2173-04-13 23:59:00   40   12   11
3           2 2173-04-12 2173-04-21 23:59:00   40   12   12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...