从日期列中减去数字列(代表年份)以创建新的日期列
Subtract a number column (representing years) from a Date column to create a new date colum
我在同一数据框 (df) 中有日期列 (Dtype = datetime64[ns]) 和一列整数 (Dtype = Int16)。
整数列的值都在 20 到 100 之间。
我想创建一个新的日期列,即日期列减去整数列
IE。
df:
更新日期 |年龄 |修订日期(待计算)
2019 年 1 月 1 日 | 20 | 1/1/99
22 年 4 月 2 日 | 50 | 4/2/72
到目前为止我已经尝试过:
df['RevisedDate'] = df['RepDate'] - pd.DateOffset(years= df['Age'])
但我收到类型错误:无法将系列转换为
我也尝试过解构和重新组合:
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'])
但是我在最后一行得到了同样的错误。
你的帮助会很受欢迎
要实现这一点,您有两种方法:
- 将 Age 转换为以年为单位的 timedelta(最近的 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
我在同一数据框 (df) 中有日期列 (Dtype = datetime64[ns]) 和一列整数 (Dtype = Int16)。 整数列的值都在 20 到 100 之间。
我想创建一个新的日期列,即日期列减去整数列 IE。 df:
更新日期 |年龄 |修订日期(待计算)
2019 年 1 月 1 日 | 20 | 1/1/99
22 年 4 月 2 日 | 50 | 4/2/72
到目前为止我已经尝试过:
df['RevisedDate'] = df['RepDate'] - pd.DateOffset(years= df['Age'])
但我收到类型错误:无法将系列转换为
我也尝试过解构和重新组合:
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'])
但是我在最后一行得到了同样的错误。
你的帮助会很受欢迎
要实现这一点,您有两种方法:
- 将 Age 转换为以年为单位的 timedelta(最近的 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