首页 > 解决方案 > 每 x 行添加 1 天

问题描述

我想每 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 天

标签: pythonpandasdataframe

解决方案


如果需要通过start_date添加由 DataFrame 长度生成的 timedeltas 天数开始的每 3 个值np.arange,那么循环解决方案的速度更快:

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)

推荐阅读