Объединение столбцов для создания индекса datetime в pandas - PullRequest
0 голосов
/ 30 марта 2020

Я хочу объединить данные даты и времени в нескольких столбцах Pandas кадра данных, чтобы создать DatetimeIndex. У меня есть это:

In:  
import pandas as pd
df = pd.DataFrame({'the_date':['2020-03-26', '2020-03-26', '2020-03-25','2020-03-25'],
                   'hour': [1,2,1,2],
                   'data': [4,5,6,7]})
df

Out:    
the_date    hour    data
0   2020-03-26  1   4
1   2020-03-26  2   5
2   2020-03-25  1   6
3   2020-03-25  2   7


df['ts'] = df.apply(lambda row: pd.to_datetime(row['the_date'] + " " + str(row['hour']) +":00:00"))
df = df.set_index('ts')

Но я получаю эту ошибку:

KeyError: ('the_date', 'occurred at index the_date') Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

На самом деле это довольно распространенная ошибка!

Ось по умолчанию pandas.DataFrame.apply равна 0, то есть лямбда-функция применяется к каждому столбцу (и, следовательно, вы не можете принимать значения других столбцы во внимание для ваших расчетов). Вам нужно изменить ось на 1, т.е. применить ее к каждой строке:

df['ts'] = df.apply(lambda row: pd.to_datetime(row['the_date'] + " " + str(row['hour']) +":00:00"), axis=1)
1 голос
/ 30 марта 2020

Вы можете избежать петель (применяются петли под капотом): to_timedelta:

df['the_date'] = pd.to_timedelta(df['hour'], unit='H') + pd.to_datetime(df['the_date'])  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...