我的数据是2021-1-1到2021-12-31 每日的订货数量,index是datetime类型的日期,我希望按照一定的步长,比如说14天,从1月1号开始 到 1月14号的数据做累加之和 放到1月1号这行,接下来1月2号到1月15号的数据做累加之和 放到1月2号这一行, 依次往下,直到12月18号到12月31号数据累加之和放到12月18号。 请问这段代码要如何实现?
你是想用python还是sql?
如果是sql,用开窗函数一次性就能查出来;
如果是python,初始化14行的记录,弄个循环,每次从前面减掉一行,并在后面加一行。或者直接循环取第N行到第N+13行,N=N+1递增,直到查完
import pandas as pd
import datetime
data = [[1, 236423, '2021-01-01'],
[2, 223387, '2021-01-02'],
[4, 397845, '2021-01-03'],
[4, 138257, '2021-01-04'],
[2, 834757, '2021-01-05'],
[2, 393475, '2021-01-06'],
[3, 393475, '2021-01-07'],
[2, 393475, '2021-01-08'],
[1, 393475, '2021-01-09'],]
df = pd.DataFrame(data=data, columns=['code', 'mv', 'date'])
def fun(se, x):
date = pd.to_datetime(se['date'])
ss = date + datetime.timedelta(days = x)
dd = df[(pd.to_datetime(df['date'])<=ss)]['code'].sum()
return dd
df['new'] = df.apply(fun, args = (4, ), axis = 1)
print(df)
'''--result
code mv date new
0 1 236423 2021-01-01 13
1 2 223387 2021-01-02 15
2 4 397845 2021-01-03 18
3 4 138257 2021-01-04 20
4 2 834757 2021-01-05 21
5 2 393475 2021-01-06 21
6 3 393475 2021-01-07 21
7 2 393475 2021-01-08 21
8 1 393475 2021-01-09 21
'''