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