我的数据集包含与销售相关的数据的多列。我在DataFrame中有ORDEREDDATE
和SHIPPINGDAYS
。我想在数据集中添加一个名为DELIVEREDDATE
的新列。
当前数据框
ORDEREDDATE SHIPPINGDAYS
2018-5-13 6
2017-8-24 4
2018-6-1 2
预期输出
ORDEREDDATE SHIPPINGDAYS DELIVEREDDATE
2018-5-13 6 2018-5-19
2017-8-24 4 2017-8-28
2018-6-1 2 2018-6-3
类型
ORDEREDDATE object
SHIPPINGDAYS object
试图解决
df1['DELIVERYDATE'] = (datetime.datetime.strptime(df1['ORDEREDDATE'].astype(str), '%Y-%m-%d') + datetime.timedelta(df1['SHIPPINGDAYS'].astype(str).astype(int))
答案 0 :(得分:2)
这是一种方法:
# make sure types are correct format
df['ORDEREDDATE'] = pd.to_datetime(df['ORDEREDDATE'])
df['SHIPPINGDAYS'] = df['SHIPPINGDAYS'].astype(int)
df['DELIVEREDDATE'] = (df
.apply(lambda x: x['ORDEREDDATE'] + pd.Timedelta(days= x['SHIPPINGDAYS']),
axis=1)
ORDEREDDATE SHIPPINGDAYS DELIVEREDDATE
0 2018-05-13 6 2018-05-19
1 2017-08-24 4 2017-08-28
2 2018-06-01 2 2018-06-03
答案 1 :(得分:1)
首先,您需要将列转换为日期时间对象:
df1['ORDEREDDATE'] = pd.to_datetime(df1['ORDEREDDATE']
然后,您定义新列,同时还将int
的{{1}}值转换为timedelta对象。这样,您可以对这些对象求和并返回所需的输出:
SHIPPINGDAYS
输出:
df['DELIVEREDDATE'] = df['ORDEREDDATE'] + df['SHIPPINGDAYS'].apply(lambda x: pd.Timedelta(x,unit='D'))
答案 2 :(得分:0)
因为您要添加秒而不是天!
您可以使用名称timedelta
自变量初始化days
。如果您不提供姓名,则以秒为单位。
此外,您以datetime
对象结尾,因此需要在计算完成后以所需的方式对其进行格式化。