我有一个类似的日期框架:
|Launch |Delivery |Step-up
0|2020-04-22 |102 |NaT
1|2020-09-02 |140 |2021-01-03
2|2019-12-24 |90 |2020-04-20
3|2020-06-14 |nan |2022-02-18
...
我想对这些列进行一些计算以创建一个称为成熟度的新列。
如果交货中有楠,则该行的到期日也应为楠。
如果没有提升,则期限=启动+交付。
如果确实存在升压,并且是
否则,成熟度就是发布+交付。
因此理想情况下,数据框应如下所示:
|Launch |Delivery |Step-up |Maturity
0|2020-04-22 |10 |NaT |2020-05-02
1|2020-09-02 |14 |2020-09-10 |2020-09-10
2|2019-12-24 |9 |2020-01-20 |2020-01-02
3|2020-06-14 |nan |2020-07-18 |nan
...
这里是代码:
import pandas as pd
import datetime
data = {'Launch':['2020-04-22', '2020-09-02', '2019-12-24', '2020-06-14'],
'Delivery':['10', '14', '9', 'nan'],
'Step-up':['NaT', '2021-01-03', '2020-04-20', '2022-02-18']}
df = pd.DataFrame(data)
append = {'Maturity':[]}
for index, row in df.iterrows():
if row['Delivery'] == 'nan':
append['Maturity'].append('nan')
elif row['Step-up'] == 'NaT':
append['Maturity'].append(datetime.datetime.strptime(row['Launch'], '%Y-%m-%d') + datetime.timedelta(days=int(row['Delivery'])))
elif row['Step-up'] != 'NaT':
launch_plus_delivery = datetime.datetime.strptime(row['Launch'], '%Y-%m-%d') + datetime.timedelta(days=int(row['Delivery']))
stepup = datetime.datetime.strptime(row['Step-up'], '%Y-%m-%d')
if stepup < launch_plus_delivery:
append['Maturity'].append(row['Step-up'])
else:
append['Maturity'].append(launch_plus_delivery)
df['Maturity'] = append['Maturity']
print(df)