提问人:Sherd 提问时间:1/11/2022 最后编辑:Sherd 更新时间:1/11/2022 访问量:341
从“日期”列中减去数字列(表示年份)以创建新的日期列
Subtract a number column (representing years) from a Date column to create a new date colum
问:
我在同一个数据帧 (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'])
但是我在最后一行遇到了同样的错误。
您的帮助将得到极大的赞赏
答:
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。
下一个:根据条件获取非 NA 日期的差异
评论