我正在尝试使用另一列中的值替换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))
谢谢
答案 0 :(得分:3)
首先将值转换为日期时间:
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)
或将日期时间转换为月份时间,然后返回第一天,并用to_timedelta
减去1
加上天时间增量:
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