我有两个数据框。 数据框1(df1): B 列最初是空的,需要如下填充。
| A( in days) | B (sum) |
| ----------- | ------- |
| 7 | |
| 14 | |
| 18 | |
| 25 | |
df1 有两列: A 列以天为单位,另一列 B 为空白,需要填充数据帧 2 中的行总和,要求和的行数基于 B 列中的天数转换为周的方式。
日期帧 2 (df2):
| week | C(weekly) |
| ---- | --------- |
| WK1 | 10 |
| WK2 | 5 |
| WK3 | 7 |
| WK4 | 4 |
| WK5 | 8 |
数据框 2 有两列: 该数据框有周数和周数,周数是周单位的总和。
我想根据数据框 2 中的 d 列填充数据框 1 的 A 列中的值,如下所示:
对于第一行,当 A=7 天时,只需使用 WK1 值(因为 7 天是 1 周,所以只需来自 DF2 的 C 的 WK1),因此 B=10
对于第二行,当 A=14 天(2 周)时,我需要来自 DF2 的 C 的 WK1 和 WK2 总和,因此 B=10+5=15 对于第三行,当A=18时,我需要WK1和WK2的总和以及来自DF2的C的5/7(WK3)),所以B=10+5+(4/7)*7=19 对于第四行,当A=25时,我需要WK1+Wk2+wk3+(4/7)*4的总和,因此B=24.28(3周加上分数-21天+第4周值的4/7)
df1(已完成):
| A( in days) | B(sum) | Methodology |
| ----------- | ------- | --------------- |
| 7 | 10 | 10 |
| 14 | 15 | 10+5 |
| 18 | 19 | 10+5+(4/7)*7 |
| 25 | 24.28 | 10+5+7+(4/7)*4 |
我是 python 新手,现在知道如何继续。请帮忙
IIUC,可以得到天数的
diff
(加0后),然后乘以C,得到cumsum
:
import numpy as np
weeks = np.diff(np.r_[0., df1['b']])/7
df1['C'] = df2['d'].iloc[:len(weeks)].mul(weeks).cumsum().to_numpy()
输出:
b C
0 7 10.0
1 14 15.0
2 18 19.0
3 25 23.0