【问题标题】:Date Offset depending on other column in pandas df日期偏移量取决于 pandas df 中的其他列
【发布时间】:2020-05-10 11:07:40
【问题描述】:

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

我认为我拥有所有的成分(功能),但与我在 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我会用一行写函数。

【问题讨论】:

    标签: python pandas time


    【解决方案1】:

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

    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')
    

    希望这会有所帮助。

    【讨论】:

    • 好的,谢谢,这是我的问题。也许有人会有更“优雅”的解决方案,否则我会尽快将您的答案标记为正确
    • 当然,我也希望看到更好的解决方案!
    • 很高兴它有帮助,最好的,
    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2021-10-28
    • 2018-06-18
    • 1970-01-01
    相关资源
    最近更新 更多