Python 是否将新行添加到数据框中,并引用其他行?
df: 我需要在我的数据框架中再增加4周,这将取决于我的df中的最后一周, 例如,最后一周将是这一行“29SEP19 23-09-2019 29-09-2019”,因为max(结束日期),在此之后我需要再添加四周,如输出所示 df_输出:Python 是否将新行添加到数据框中,并引用其他行?,python,python-3.x,pandas,python-2.7,Python,Python 3.x,Pandas,Python 2.7,df: 我需要在我的数据框架中再增加4周,这将取决于我的df中的最后一周, 例如,最后一周将是这一行“29SEP19 23-09-2019 29-09-2019”,因为max(结束日期),在此之后我需要再添加四周,如输出所示 df_输出: End_Dt_Id Start_Date End_Date 18AUG19 12-08-2019 18-08-2019 -- date format DD/MM/YYYY 25AUG19 19-08-2019 25-08-2019
End_Dt_Id Start_Date End_Date
18AUG19 12-08-2019 18-08-2019 -- date format DD/MM/YYYY
25AUG19 19-08-2019 25-08-2019
01SEP19 26-08-2019 01-09-2019
08SEP19 02-09-2019 08-09-2019
15SEP19 09-09-2019 15-09-2019
22SEP19 16-09-2019 22-09-2019
12SEP19 23-09-2019 29-09-2019
我不确定我是否理解逻辑,但这提供了您想要的输出:
End_Dt_Id Start_Date End_Date
18AUG19 12-08-2019 18-08-2019 -- date format DD/MM/YYYY
25AUG19 19-08-2019 25-08-2019
01SEP19 26-08-2019 01-09-2019
08SEP19 02-09-2019 08-09-2019
15SEP19 09-09-2019 15-09-2019
22SEP19 16-09-2019 22-09-2019
29SEP19 23-09-2019 29-09-2019
05OCT19 30-09-2019 05-10-2019
12OCT19 06-10-2019 12-10-2019
19OCT19 13-10-2019 19-10-2019
26OCT19 20-10-2019 26-10-2019
返回:
last_row = df.sort_values('End_Date')[-1:]
new_rows = []
start_date = last_row['Start_Date'].iloc[0]
end_date = last_row['End_Date'].iloc[0]
for i in range(1,5):
start_date = end_date + dt.timedelta(days=1)
end_date = end_date + dt.timedelta(days=7)
end_dt_id = dt.datetime.strftime(end_date, '%d%b%y').upper()
new_rows.append([end_dt_id,start_date, end_date])
df = pd.concat([
df,
pd.DataFrame(new_rows, columns=['End_Dt_Id', 'Start_Date', 'End_Date'])
])
for col in ['Start_Date', 'End_Date']:
df[col] = pd.to_datetime(df[col]).dt.strftime('%d-%m-%Y')
最长截止日期不是2019年9月22日吗?或者你只是想在最后一行加上4行?为什么你的日期会倒退,这里的逻辑是什么?@DataNoveler对不起,我的错,我已经纠正了问题,请检查一下。对不起,我的错,我已经纠正了问题,请检查一下。我不明白逻辑。。第一个数据帧中的值增加7。。例如,
15-09-2019->22-09-2019
。。但是在29-09-2019
和05-10-2019
之间只有6天的时间,实际上我得到了逻辑部分,但有一点需要担心的是,df并不总是将最后一行包含为max(date)行,因此df[-1]不会总是起作用。因此,根据日期获取最后一行是很好的。好的,我修改了我的答案,以按日期获取最后一行。我有一个疑问,开始日期和结束日期是如何变化的,因为您编写了start_date=end_date+dt.timedelta(days=1),所以如果我的最后一行['end_date']=29-06-2019,第一次迭代应该给出30-06-2019。对于第二次迭代,因为结束日期是从最后一行开始的,它应该给出30-06-2019,但它会给出07-07-2019,如何???
End_Dt_Id Start_Date End_Date
18AUG19 12-08-2019 18-08-2019
25AUG19 19-08-2019 25-08-2019
01SEP19 26-08-2019 01-09-2019
08SEP19 02-09-2019 08-09-2019
15SEP19 09-09-2019 15-09-2019
22SEP19 16-09-2019 22-09-2019
12SEP19 23-09-2019 12-09-2019
19SEP19 13-09-2019 19-09-2019
26SEP19 20-09-2019 26-09-2019
03OCT19 27-09-2019 03-10-2019
10OCT19 04-10-2019 10-10-2019