gpt4 book ai didi

python-3.x - python pandas条件累积总和

转载 作者:行者123 更新时间:2023-12-03 08:11:54 25 4
gpt4 key购买 nike

考虑我的数据框 df

data  data_binary  sum_data
2 1 1
5 0 0
1 1 1
4 1 2
3 1 3
10 0 0
7 0 0
3 1 1

我想计算 data_binary 的累积和连续组内 1值。

第一组 1有一个 1sum_data只有一个 1 .然而,第二组 1的有 3 1的和 sum_data[1, 2, 3] .

我试过使用 np.where(df['data_binary'] == 1, df['data_binary'].cumsum(), 0)但那又回来了
array([1, 0, 2, 3, 4, 0, 0, 5])

这不是我想要的。

最佳答案

你想取data_binary的累计和并减去最近的累积总和,其中 data_binary为零。

b = df.data_binary
c = b.cumsum()
c.sub(c.mask(b != 0).ffill(), fill_value=0).astype(int)

0 1
1 0
2 1
3 2
4 3
5 0
6 0
7 1
Name: data_binary, dtype: int64

说明

让我们从并排看每一步开始
cols = ['data_binary', 'cumulative_sum', 'nan_non_zero', 'forward_fill', 'final_result']
print(pd.concat([
b, c,
c.mask(b != 0),
c.mask(b != 0).ffill(),
c.sub(c.mask(b != 0).ffill(), fill_value=0).astype(int)
], axis=1, keys=cols))


data_binary cumulative_sum nan_non_zero forward_fill final_result
0 1 1 NaN NaN 1
1 0 1 1.0 1.0 0
2 1 2 NaN 1.0 1
3 1 3 NaN 1.0 2
4 1 4 NaN 1.0 3
5 0 4 4.0 4.0 0
6 0 4 4.0 4.0 0
7 1 5 NaN 4.0 1
cumulative_sum 的问题是 data_binary 所在的行为零,不重置总和。这就是这个解决方案的动机。我们如何在 data_binary 时“重置”总和是零吗?容易!我将累积总和切片,其中 data_binary为零并向前填充值。当我计算这个和累积总和之间的差异时,我已经有效地重置了总和。

关于python-3.x - python pandas条件累积总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41420822/

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