gpt4 book ai didi

python - pandas.DataFrame.cumsum 函数的问题

转载 作者:行者123 更新时间:2023-12-01 08:59:53 25 4
gpt4 key购买 nike

我在 python 中有以下数据框:

month = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2,3,4]
active = [1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1]
data1 = [1709.1,3869.7,4230.4,4656.9,48566.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93738.2,189293.2,194412.6,206585.8]
df = pd.DataFrame({
'month' : month,
'active' : active,
'd1' : data1,
'calculate' : 0,
});

我想按以下方式计算“计算”列:

    month  active        d1  calculate0       1       1    1709.1     569.701       2       1    3869.7    1859.602       3       1    4230.4    3269.733       4       1    4656.9    4822.034       5       0   48566.0       0.005       6       0       0.0       0.006       7       0       0.0       0.007       8       0       0.0       0.008       9       0       0.0       0.009      10       0       0.0       0.0010     11       0       0.0       0.0011     12       0       0.0       0.0012     13       0       0.0       0.0013     14       0       0.0       0.0014     15       0       0.0       0.0015     16       0       0.0       0.0016     17       0       0.0       0.0017     18       0       0.0       0.0018     19       0       0.0       0.0019     20       0       0.0       0.0020      1       1   93738.2   31246.0721      2       1  189293.2   94343.8022      3       1  194412.6  159148.0023      4       1  206585.8  228009.93

I am doing it in the following way:

df['calculate'] = np.where(
df.month > 1,
np.where(
df.active,
(df.d1/3).cumsum(),
0,
),
(df['d1']/3)
)

但结果不是预期的:

    month  active        d1      calculate0       1       1    1709.1     569.7000001       2       1    3869.7    1859.6000002       3       1    4230.4    3269.7333333       4       1    4656.9    4822.0333334       5       0   48566.0       0.0000005       6       0       0.0       0.0000006       7       0       0.0       0.0000007       8       0       0.0       0.0000008       9       0       0.0       0.0000009      10       0       0.0       0.00000010     11       0       0.0       0.00000011     12       0       0.0       0.00000012     13       0       0.0       0.00000013     14       0       0.0       0.00000014     15       0       0.0       0.00000015     16       0       0.0       0.00000016     17       0       0.0       0.00000017     18       0       0.0       0.00000018     19       0       0.0       0.00000019     20       0       0.0       0.0020      1       1   93738.2   31246.0721      2       1  189293.2  115354.5022      3       1  194412.6  180158.7023      4       1  206585.8  249020.63

不知道我的要求是否清楚,谢谢谁能帮助我。

最佳答案

新答案

您的问题过于复杂化,您的问题可以简化为:

df.groupby(df.active.ne(df.active.shift()).cumsum()).d1.cumsum().div(3) * df.active

0        569.700000
1 1859.600000
2 3269.733333
3 4822.033333
4 0.000000
5 0.000000
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
11 0.000000
12 0.000000
13 0.000000
14 0.000000
15 0.000000
16 0.000000
17 0.000000
18 0.000000
19 0.000000
20 31246.066667
21 94343.800000
22 159148.000000
23 228009.933333
dtype: float64
<小时/>

旧答案(我认为包含它来解释所尝试的逻辑仍然有用)

您只需要 1 的连续区域的累积和,但是,当您到达 DataFrame 的末尾时,您将继续 DataFrame 其余部分的累积和。一种解决方案是计算每组连续 1 的 cumsum,然后在最终检查中使用此结果。

<小时/>

np.select 更容易阅读时,我还希望避免链接调用 np.where

s = df.groupby(df.active.ne(df.active.shift()).cumsum()).d1.cumsum()

c1 = df.month.gt(1) & df.active
c2 = df.month.gt(1) & ~df.active

df.assign(calculate=np.select([c1, c2], [s.div(3), 0], df.d1.div(3)))

    month  active        d1      calculate
0 1 1 1709.1 569.700000
1 2 1 3869.7 1859.600000
2 3 1 4230.4 3269.733333
3 4 1 4656.9 4822.033333
4 5 0 48566.0 0.000000
5 6 0 0.0 0.000000
6 7 0 0.0 0.000000
7 8 0 0.0 0.000000
8 9 0 0.0 0.000000
9 10 0 0.0 0.000000
10 11 0 0.0 0.000000
11 12 0 0.0 0.000000
12 13 0 0.0 0.000000
13 14 0 0.0 0.000000
14 15 0 0.0 0.000000
15 16 0 0.0 0.000000
16 17 0 0.0 0.000000
17 18 0 0.0 0.000000
18 19 0 0.0 0.000000
19 20 0 0.0 0.000000
20 1 1 93738.2 31246.066667
21 2 1 189293.2 94343.800000
22 3 1 194412.6 159148.000000
23 4 1 206585.8 228009.933333

关于python - pandas.DataFrame.cumsum 函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52540197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com