Замена номера дня для каждого значения в столбце фрейма данных - PullRequest
2 голосов
/ 23 апреля 2019

Я пытаюсь заменить значения дня в столбце datetime, используя значения из другого столбца.

Это мой фрейм данных:

    ID   Code   Day_to_replace  Base_date
0   123  403        28          22/02/2013
1   456  402        21          22/03/2011
2   789  401        14          01/05/2017

и вот что я хочу закончить:

    ID   Code   Day_to_replace  Base_date    New_Date
0   123  403    28              22/02/2013   28/02/2013
1   456  402    21              22/03/2011   21/03/2011
2   789  401    14              01/05/2017   14/05/2017

Я могу сделать это, используя статическое значение, но не могу понять, как использовать значение из другого столбца для применения к каждой записи.

newdf['New_Date'] = newdf['Base_Date'].apply(lambda x: x.replace(day=1))

Спасибо

1 Ответ

3 голосов
/ 23 апреля 2019

Сначала преобразовать значения в datetime:

df['Base_date'] = pd.to_datetime(df['Base_date'], format='%d/%m/%Y')

Используйте DataFrame.apply с axis=1 для цикла в строках:

df['New_Date'] = df.apply(lambda x: x['Base_date'].replace(day=x['Day_to_replace']), axis=1)

Или преобразовать дату и время в месяц и обратно для первого дня и сложить дневные временные значения с вычитанием 1 на to_timedelta:

df['New_Date'] = (df['Base_date'].dt.to_period('m').dt.to_timestamp() +  
                  pd.to_timedelta(df['Day_to_replace'].sub(1), unit='d'))

Или преобразовать значения в строки, добавить дни и преобразовать в datetime:

df['New_Date'] = pd.to_datetime(df['Base_date'].dt.strftime('%Y-%m-') + 
                                df['Day_to_replace'].astype(str))

print (df)
    ID  Code  Day_to_replace  Base_date   New_Date
0  123   403              28 2013-02-22 2013-02-28
1  456   402              21 2011-03-22 2011-03-21
2  789   401              14 2017-05-01 2017-05-14
...