替换数据框列中每个值的日期编号

问题描述 投票:2回答:1

我正在尝试使用另一列中的值替换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))

谢谢

python-3.x pandas dataframe replace timestamp
1个回答
3
投票

首先将值转换为日期时间:

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

使用DataFrame.applyaxis=1每行循环:

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

或者将日期时间转换为月份期间并返回第一天,并添加天数timedeltas并通过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'))

或者将值转换为字符串,添加天数并转换为日期时间:

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
© www.soinside.com 2019 - 2024. All rights reserved.