【发布时间】:2021-07-28 14:23:59
【问题描述】:
我有一张表,我需要在其中添加天数并使用该信息创建一个新列。我遇到的问题是有两个基于不同列的日期计算。这是一张与我正在使用的表格类似的表格:
Type Name Date
A Abe 6/2/2021
B Joe 6/15/2021
A Jin 6/25/2021
A Jen 6/1/2021
B Pan 6/21/2021
B Pin 6/22/2021
B Hon 6/11/2021
A Hen 6/23/2021
A Bin 6/23/2021
A Ban 6/5/2021
我试图让表格返回这样,其中 A 型上升 7 天,B 型上升 2 个工作日:
Type Name Date NewDate
A Abe 6/2/2021 6/9/2021
B Joe 6/15/2021 6/19/2021
A Jin 6/25/2021 7/2/2021
A Jen 6/1/2021 6/8/2021
B Pan 6/21/2021 6/23/2021
B Pin 6/22/2021 6/26/2021
B Hon 6/11/2021 6/13/2021
A Hen 6/23/2021 6/30/2021
A Bin 6/23/2021 6/30/2021
A Ban 6/5/2021 6/12/2021
到目前为止,我已经尝试过这些:
import pandas as pd
from pandas.tseries.offsets import BDay
from datetime import datetime, timedelta
df1['NewDate'] = df1.apply(df1['Date'] + timedelta(days=7)
if x=='Emergency' else df1['Date'] + BDay(2) for x in df1['Type'])
不要运行它,否则你会陷入无限循环,或者会花费很长时间。
我也运行过这个:
df1['NewDate'] = [df1['Date'] + timedelta(days=7) if i=='Emergency' else df1['Date'] + BDay(2)
for i in df1.Type] (also tried with df1[Type] same results.
这会将所有行放在一行中(几乎看起来像它在 jupyter notebook 上返回的方式...)
我也试过这个:
df1['NewDate'] = df1['Type'].apply(lambda x: df1['Date'] + timedelta(days=7) if x=='Emergency'
else df1['Date'] + BDay(2))
当我运行它时,它将遍历类型的每一行,并在 7 天前计算紧急情况时应用正确的逻辑,如果不按工作日计算,问题是返回的每一行都是在第一行计算的整个表格的行。
此时我有点迷茫,任何帮助将不胜感激。为简单起见,它可以在加上 timedelta(7) 和加上 timedelta(2) 处计算。另外,如果我必须添加更多条件,例如在名称列上说,会发生什么变化。
【问题讨论】:
标签: python pandas datetime conditional-formatting