我想每3行增加1天。
日期start_date = "01/02/21"
date_1 = datetime.datetime.strptime(start_date, "%d/%m/%y")
end_date = date_1 + datetime.timedelta(days=1)
df_4["date"] = end_date
需要的输出
A date
1 01/02/21
2 01/02/21
3 01/02/21
4 02/02/21 # add 1 day
5 02/02/21
6 02/02/21
7 03/02/21 # add 1 day
8 03/02/21
9 03/02/21
10 04/02/21 # add 1 day
11 04/02/21
12 04/02/21
...
现在它为所有行增加1天,而不是每3行增加1天
如果需要start_date
开始的每3个值添加timedeltas由np.arange
生成的天数与DataFrame的长度,什么是更快的循环解决方案:
start_date = "01/02/21"
date_1 = datetime.datetime.strptime(start_date, "%d/%m/%y")
df["date"] = date_1 + pd.to_timedelta(np.arange(len(df)) // 3, unit='d')
print (df)
A date Note
0 1 2021-02-01 NaN
1 2 2021-02-01 NaN
2 3 2021-02-01 NaN
3 4 2021-02-02 add
4 5 2021-02-02 NaN
5 6 2021-02-02 NaN
6 7 2021-02-03 ad
7 8 2021-02-03 NaN
8 9 2021-02-03 NaN
9 10 2021-02-04 add
10 11 2021-02-04 NaN
11 12 2021-02-04 NaN
:
print (np.arange(len(df)) // 3)
[0 0 0 1 1 1 2 2 2 3 3 3]
print (pd.to_timedelta(np.arange(len(df)) // 3, unit='d'))
TimedeltaIndex(['0 days', '0 days', '0 days', '1 days', '1 days', '1 days',
'2 days', '2 days', '2 days', '3 days', '3 days', '3 days'],
dtype='timedelta64[ns]', freq=None)
下面的代码片段将在每3行(由add_every_x_rows
指定)之后的行中增加一天的日期
df['Date'] = [datetime.datetime.strptime(str(x), "%d/%m/%y").date() for x in df['Date']]
add_every_x_rows = 3
day_counter = 0
for i,row in df.iterrows():
day_counter+=1
if (day_counter == add_every_x_rows +1):
df.at[i,'Date'] = row['Date'] + datetime.timedelta(days=1)
day_counter = 1
如果稍后将add_every_x_rows
的值更改为4,它将开始每四行增加一天的日期。