首页 > 解决方案 > 日期偏移量取决于 pandas df 中的其他列

问题描述

嗨,我是从 R 切换 python 的新手,我很难完成这个非常简单的任务,即根据熊猫数据框的另一列更改日期。我阅读了其他几个关于此的问题,我希望有人可以快速解决我的问题,因为除了互联网我没有其他人可以问。

我想我拥有所有的成分(功能),但与我在 R 中习惯的相比,我真的很难使用 pandas df。

import datetime
from datetime import datetime
import pandas as pd
import numpy as np

today=pd.to_datetime(datetime.today().strftime('%Y-%m-%d'))

d={"Start_Date":[today,today]}
df=pd.DataFrame(data=d)
n=len(df)
df["Distance"]=np.round_(np.random.uniform(low=1, high=14, size=n)).astype(int)

df.loc[:,"FutureDate"]=""
for index, row in df.iterrows():
    print(row["Start_Date"]+pd.DateOffset(row["Distance"]))  
    row["FutureDate"]=row["Start_Date"]+pd.DateOffset(row["Distance"])

如果打印语句有效,为什么我的 FutureDate 列是空的?有没有比使用循环更优雅的解决方案?我已经习惯了data.table在一行中编写函数的地方。

标签: pythonpandastime

解决方案


试试这个代码..它对我有用:

import datetime
from datetime import datetime
import pandas as pd
import numpy as np

today=pd.to_datetime(datetime.today().strftime('%Y-%m-%d'))

d={"Start_Date":[today,today]}
df=pd.DataFrame(data=d)
n=len(df)
df["Distance"]=np.round_(np.random.uniform(low=1, high=14, size=n)).astype(int)

df.loc[:,"FutureDate"]=""
for index, row in df.iterrows():
    print(row["Start_Date"]+pd.DateOffset(row["Distance"]))  
    df.loc[index, "FutureDate"]=row["Start_Date"]+pd.DateOffset(row["Distance"])

事实上,我们需要为 df 本身的值分配正确的索引和列。

EDIT:

更优雅的方式:

import datetime
# from datetime import datetime
import pandas as pd
import numpy as np

today=pd.to_datetime(datetime.datetime.today().strftime('%Y-%m-%d'))

d={"Start_Date":[today,today]}
df=pd.DataFrame(data=d)
n=len(df)
df["Distance"]=np.round_(np.random.uniform(low=1, high=14, size=n)).astype(int)

df["FutureDate"]=df["Start_Date"] + pd.to_timedelta(df['Distance'],'d')

希望这可以帮助。


推荐阅读