python-3.x - 替换数据框列中每个值的天数

标签 python-3.x pandas dataframe replace timestamp

我正在尝试使用另一列中的值替换日期时间列中的日期数值。

这是我的数据框:

    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))

谢谢

最佳答案

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

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'))

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

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

关于python-3.x - 替换数据框列中每个值的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55810184/

相关文章:

python-3.x - Python Poloniex API 调用

python - 有没有办法将默认参数设置为等于另一个参数值?

python - 如何在 pandas 数据框行中附加所有具有相同 id 的元素?

python - 如何创建一个新列,说明此行是否是 Pandas 中每个订单的最新修订订单

Python 3.6 - 使用异步函数进行过滤

python - 有没有办法在大括号内分解 f 弦?

python - 避免 pandas 合并中的重复计算

python-3.x - 如何根据唯一字符串值将 pandas 数据帧拆分为多个数据帧而不聚合

python - 在 DataFrame 中插入 Pandas 绘图图像

python - 如何使用python补充时间序列中缺失的数据?