У меня есть Pandas DataFrame с 3 столбцами, как показано ниже:

ДФ:

day         min_from  value
2012-10-12    0        0.34
2012-10-12    30       0.36
2012-10-12    60       0.56

Df.dtypes

min_from               int64
day                    datetime64[ns]
value                  float64

Я пытаюсь создать следующее

date                   value
2012-10-12 00:00:00    0.34
2012-10-12 00:30:00    0.36
2012-10-12 00:60:00    0.56

Я устал:

def create_dt(row):
    return str(df['day'])+ ' '+ str(timedelta(minutes=df['min_from']))

df['date_time'] = df.apply(create_dt, axis=1)

Но я получаю следующую ошибку при применении create_dt:

TypeError: ('unsupported type for timedelta minutes component: Series', 'occurred at index 0')
1
proximacentauri 24 Окт 2018 в 01:38

2 ответа

Лучший ответ

Если ваш day столбец имеет формат datetime, вы можете добавить Timedelta, например, избегая вызова apply (который может быть медленным):

# In case day is not datetime yet:
df['date'] = pd.to_datetime(df['day']) + pd.to_timedelta(df['min_from'],unit='m')

# Otherwise
df['date'] = df['day'] + pd.to_timedelta(df['min_from'],unit='m')

>>> df
         day  min_from  value                 date
0 2012-10-12         0   0.34  2012-10-12 00:00:00
1 2012-10-12        30   0.36  2012-10-12 00:30:00
2 2012-10-12        60   0.56  2012-10-12 01:00:00
2
sacuL 23 Окт 2018 в 22:44
from datetime import timedelta

df['date'] = df.apply(lambda row: row.day + timedelta(minute=row.min_from), axis=1)

Создаст date столбец в вашем DataFrame с минутами

1
Rocky Li 23 Окт 2018 в 22:42
52958741