使用天数列更新python中的日期字段

使用天数列更新python中的日期字段,python,pandas,dataframe,datetime,Python,Pandas,Dataframe,Datetime,您好,我的数据框“finaldatadf”如下所示。我正在尝试更新我的交货日期,并将运输列(工作日)中的天数添加到shipdate字段 ShipDate和Deliverydate为日期时间,transit为int类型 有些行的DeliveryDate字段为空。因此,我要做的是仅为DeliveryDate为空的行更新DeliveryDate,公式如下: DeliveryDate=DeliveryDate+n个工作日 式中,n=运输列中的值 我只想更新交付日期尚未填充的列。我希望对已经有交付日期的

您好,我的数据框“finaldatadf”如下所示。我正在尝试更新我的交货日期,并将运输列(工作日)中的天数添加到shipdate字段

ShipDate和Deliverydate为日期时间,transit为int类型

有些行的DeliveryDate字段为空。因此,我要做的是仅为DeliveryDate为空的行更新DeliveryDate,公式如下:

DeliveryDate=DeliveryDate+n个工作日 式中,n=运输列中的值

我只想更新交付日期尚未填充的列。我希望对已经有交付日期的行保持相同的数据。 输出:

pandas.tseries.offset使用:

m = df['DeliveryDate'].isna()
df.loc[m, 'DeliveryDate'] = df[m].apply(
    lambda x: x['ShipDate'] + BDay(x['Transit']),
    axis=1
)

完整代码:

import pandas as pd
from pandas.tseries.offsets import BDay

df = pd.DataFrame({
    'ShipDate': ['5/27/2021', '5/27/2021'],
    'DeliveryDate': ['5/31/2021', None],
    'Transit': [2, 3]
})
df['ShipDate'] = pd.to_datetime(df['ShipDate'])
df['DeliveryDate'] = pd.to_datetime(df['DeliveryDate'])

m = df['DeliveryDate'].isna()
df.loc[m, 'DeliveryDate'] = df[m].apply(
    lambda x: x['ShipDate'] + BDay(x['Transit']),
    axis=1
)

如果尚未将列转换为
datetime64

df[“ShipDate”]=pd.to_datetime(df[“ShipDate”])
df[“DeliveryDate”]=pd.to_datetime(df[“DeliveryDate”])
发货日期交货日期运输
0 2021-05-27   2021-05-31        2
1 2021-05-27   2021-06-01        3

DeliveryDate=DeliveryDate+…
不可能。如何获得2021-06-01?2021-05-31+BD(2)=2021-06-02和2021-05-31+BD(3)=2021-06-03。这是Corraline的营业日。6/1是5/27+3个工作日,因为5/29和5/30是周末。我的坏。。。我没有看到第一栏:)谢谢你们,这很有帮助。谢谢@correalen。这很有帮助!谢谢你,亨利。这很有帮助!
import pandas as pd
from pandas.tseries.offsets import BDay

df = pd.DataFrame({
    'ShipDate': ['5/27/2021', '5/27/2021'],
    'DeliveryDate': ['5/31/2021', None],
    'Transit': [2, 3]
})
df['ShipDate'] = pd.to_datetime(df['ShipDate'])
df['DeliveryDate'] = pd.to_datetime(df['DeliveryDate'])

m = df['DeliveryDate'].isna()
df.loc[m, 'DeliveryDate'] = df[m].apply(
    lambda x: x['ShipDate'] + BDay(x['Transit']),
    axis=1
)
offset_bd = lambda x: x["ShipDate"] + pd.tseries.offsets.BusinessDay(x["Transit"])
df["DeliveryDate"] = df["DeliveryDate"].fillna(df.apply(offset_bd, axis=1))