Python Dataframe日期加上来自另一列的月份变量
我有一个带有日期和月份差异变量的数据框。我希望根据以下逻辑获得一个新日期(将其命名为Target_date): 例如,日期为2019年2月13日,月差为3,则目标日期应为原始日期的月底加上3个月,即2019年5月31日 我尝试了以下方法以首先获取traget日期:Python Dataframe日期加上来自另一列的月份变量,python,dataframe,datetime,relativedelta,Python,Dataframe,Datetime,Relativedelta,我有一个带有日期和月份差异变量的数据框。我希望根据以下逻辑获得一个新日期(将其命名为Target_date): 例如,日期为2019年2月13日,月差为3,则目标日期应为原始日期的月底加上3个月,即2019年5月31日 我尝试了以下方法以首先获取traget日期: df["Target_Date"] = df["Date"] + pd.DateOffset(months = df["month_diff"]) 但它失败了,正如我所知,dateoffset中的参数应该是一个变量或一个固定的数字
df["Target_Date"] = df["Date"] + pd.DateOffset(months = df["month_diff"])
但它失败了,正如我所知,dateoffset中的参数应该是一个变量或一个固定的数字
我还尝试:
df["Target_Date"] = df["Date"] + relativedelta(months = df["month_diff"])
它也失败了
有人能帮忙吗?多谢各位
编辑:
这是一个包含数百万行的大型数据集。我将采用以下方法来计算您的“目标日期”
导入日历
从dateutil.relativedelta导入relativedelta
对于df.index中的ii:
在[ii'开始日期']+相对延迟(月数=在[ii'月数差异']时的延迟)
最大日期=日历月(新的年,新的月)[1]
结束=新建+相对延迟(天数=最长日期-新建天数)
打印(结束)
对函数和/或列表的进一步“清理”可能会使其速度更快您可以试试这个
将熊猫作为pd导入
从dateutil.relativedelta导入relativedelta
df=pd.DataFrame({'Date':[pd.datetime(2019,1,1),pd.datetime(2019,2,1)],'month_diff':[1,2]})
df.apply(lambda行:行.日期+相对LTA(月=行.月差异),轴=1)
或列表理解
[date + relativedelta(months=month_diff) for date, month_diff in df[['Date', 'month_diff']].values]
这是我解决你们问题的方法。
然而由于某种原因,我的输出中出现了一个语义错误,尽管我确信这是正确的方法。如果您注意到一些错误,请大家纠正我
today = datetime.now()
today = today.strftime("%d/%m/%Y")
month_diff =[30,5,7]
n = 30
for i in month_diff:
b = {'Date': today, 'month_diff':month_diff,"Target_Date": datetime.now()+timedelta(days=i*n)}
df = pd.DataFrame(data=b)
输出:
由于某些原因,i没有得到更新。
relativedelta
在这样的系列上不起作用。请尝试:df.apply(lambda行:行.日期+relativedelta(月=行.月_diff)
。可能会更改轴或其他东西。但是,如果数据太大,这将不会太有效。您想检索结束日期还是月份差异?@bramb我正在尝试检索表中突出显示的目标日期。。好的,您试过下面的部分吗?谢谢,bramb。此解决方案在df.index中使用for iiode>,这是一种循环,我认为对于大型数据集来说这很耗时。对吗?您可以将其更改为列表理解或函数。这将使其更高效;)
today = datetime.now()
today = today.strftime("%d/%m/%Y")
month_diff =[30,5,7]
n = 30
for i in month_diff:
b = {'Date': today, 'month_diff':month_diff,"Target_Date": datetime.now()+timedelta(days=i*n)}
df = pd.DataFrame(data=b)