对 Pandas DataFrame 中的行进行求和,其中求和的行数基于不同 DataFrame 中的列值

问题描述 投票:0回答:1

我有两个数据框。 数据框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 新手,现在知道如何继续。请帮忙

pandas dataframe variables sum
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.