gpt4 book ai didi

python - 累积总和仅适用于 1 列 python

转载 作者:太空宇宙 更新时间:2023-11-03 13:33:53 25 4
gpt4 key购买 nike

我只想在 1 个特定列上应用 cumsum,因为我在不同列中有其他值必须保持不变。

这是我目前的脚本

df.groupby(by=['name','day']).sum().groupby(level=[0]).cumsum()

但是,此脚本会导致我的 pandas df 中的所有列都将累积。唯一必须求和的列是 data

根据要求,这里是一些示例数据:

df = pd.DataFrame({'ID': ["880022443344556677787", "880022443344556677782", "880022443344556677787",
"880022443344556677782", "880022443344556677787", "880022443344556677782",
"880022443344556677781"],
'Month': ["201701", "201701", "201702", "201702", "201703", "201703", "201703"],
'Usage': [20, 40, 100, 50, 30, 30, 2000],
'Sec': [10, 15, 20, 1, 5, 6, 30]})

ID Month Sec Usage
0 880022443344556677787 201701 10 20
1 880022443344556677782 201701 15 40
2 880022443344556677787 201702 20 100
3 880022443344556677782 201702 1 50
4 880022443344556677787 201703 5 30
5 880022443344556677782 201703 6 30
6 880022443344556677781 201703 30 2000

期望的输出

                      ID   Month  Sec  Usage
0 880022443344556677787 201701 10 20
1 880022443344556677782 201701 15 40
2 880022443344556677787 201702 20 120
3 880022443344556677782 201702 1 90
4 880022443344556677787 201703 5 150
5 880022443344556677782 201703 6 120
6 880022443344556677781 201703 30 2000

最佳答案

考虑数据框 df

df = pd.DataFrame(dict(
name=list('aaaaaaaabbbbbbbb'),
day=np.tile(np.arange(2).repeat(4), 2),
data=np.arange(16)
))

首先,您通过在 groupby 语句之后命名列来对特定列执行 cumsum

其次,您可以使用 join

将其添加回数据框 df
d2 = df.groupby(['name', 'day']).data.sum().groupby(level=0).cumsum()

df.join(d2, on=['name', 'day'], rsuffix='_cum')

data day name data_cum
0 0 0 a 6
1 1 0 a 6
2 2 0 a 6
3 3 0 a 6
4 4 1 a 28
5 5 1 a 28
6 6 1 a 28
7 7 1 a 28
8 8 0 b 38
9 9 0 b 38
10 10 0 b 38
11 11 0 b 38
12 12 1 b 92
13 13 1 b 92
14 14 1 b 92
15 15 1 b 92

关于python - 累积总和仅适用于 1 列 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42526344/

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