从“日期”列中减去数字列(表示年份)以创建新的日期列

Subtract a number column (representing years) from a Date column to create a new date colum

提问人:Sherd 提问时间:1/11/2022 最后编辑:Sherd 更新时间:1/11/2022 访问量:341

问:

我在同一个数据帧 (df) 中有一列日期 ( Dtype = datetime64[ns]) 和一列整数 (Dtype = Int16)。 整数列的值都介于 20 和 100 之间。

我想创建一个新的日期列,即日期列减去整数列 即 DF:

RepDate (回复日期) |年龄 |修订日期 (待计算)
1/1/19 |20 |99-1-1
22-4-2 |50 |4/2/72

到目前为止,我已经尝试过:

df['RevisedDate'] = df['RepDate'] - pd.DateOffset(years= df['Age'])

但我收到一个 TypeError:无法将序列转换为<类'int'>

我还尝试过 deconstrucint 并放回 Torgether:

df['YofRevDate'] = pd.DatetimeIndex(df['RepDate']).year - df['Age']
df['MofRevDate'] = pd.DatetimeIndex(df['RepDate']).month
df['DofRevDate'] = pd.DatetimeIndex(df['RepDate']).day

df['RevisedDate'] = date(df['YofRevDate'], df['MofRevDate'], df['DofRevDate'])

但是我在最后一行遇到了同样的错误。

您的帮助将得到极大的赞赏

Python 日期 数据操作

评论


答:

0赞 404pio 1/11/2022 #1

要实现这一点,您有 2 种方法:

  • 将 Age 转换为类似 timedelta (in years) 的内容(在最近的 pandas 版本中不受支持),并将 timedelta 添加到日期列
  • 解析日期列,进行年龄计算,创建新的日期列

我不确定我的溶解速度有多快(第二种选择):

new_year = (df.RepDate.dt.year + df.Age).astype(str)
month_day = df.RepDate.dt.month.astype(str) + "-" + df.RepDate.dt.day.astype(str)
df['NewRepDate'] = pd.to_datetime(new_year + "-" + month_day,format="%Y-%m-%d")
df

评论

1赞 Sherd 1/11/2022
太好了,谢谢。这是我使用的第二个解决方案 - 看起来我走在正确的道路上,只是语法pd.to_datetime。