pandas - 我可以创建一个每次达到 cumsum 阈值时从 0 重置的参考索引列吗
问题描述
我正在尝试添加一个累积和列和一个新的索引列 n_index。使用现有答案,我添加了一个 cumsum 列,但我拥有的参考索引列不是我需要的。
df = pd.DataFrame({'amount':[4, 3, 7, 8, 2, 1, 5, 3, 5, 8]})
ls = []
n_index = []
cumsum = 0
last_reset = 0
threshold = 16
for i, row in df.iterrows():
if cumsum + row.amount <= threshold:
cumsum = cumsum + row.amount
n_index.append(i)
else:
last_reset = cumsum
cumsum = row.amount
n_index.append(0)
ls.append(cumsum)
df['cumsum'] = ls
df['n_index'] = n_index
结果是:
df
amount cumsum n_index
0 4 4 0
1 3 7 1
2 7 14 2
3 8 8 0
4 2 10 4
5 1 11 5
6 5 16 6
7 3 3 0
8 5 8 8
9 8 16 9
每次超过阈值时,我都希望数据帧 n_index 从零 (0) 开始,如下所示:
amount cumsum n_index
0 4 4 0
1 3 7 1
2 7 14 2
3 8 8 0
4 2 10 1
5 1 11 2
6 5 16 3
7 3 3 0
8 5 8 1
9 8 16 2
请帮忙,谢谢。
解决方案
希望,您得到了预期的结果,并消除了错误。
df = pd.DataFrame({'amount':[4, 3, 7, 8, 2, 1, 5, 3, 5, 8]})
ls = []
n_index = []
cumsum = 0
last_reset = 0
threshold = 16
assign_indx=0
for i, row in df.iterrows():
if cumsum + row.amount <= threshold:
cumsum = cumsum + row.amount
n_index.append(assign_indx)
assign_indx+=1
else:
last_reset = cumsum
cumsum = row.amount
n_index.append(0)
assign_indx=1
ls.append(cumsum)
df['cumsum'] = ls
df['n_index'] = n_index
#Output:
amount cumsum n_index
0 4 4 0
1 3 7 1
2 7 14 2
3 8 8 0
4 2 10 1
5 1 11 2
6 5 16 3
7 3 3 0
8 5 8 1
9 8 16 2
推荐阅读
- java - java springboot中的多对多和一对多映射
- javascript - Onclick,背景图像和音乐改变。但是,音乐一直在并行播放。20个音乐文件的有效方法是什么?
- laravel - 登录某些页面后如何重定向回页面?
- camera - 树莓派 4 OBS 虚拟摄像头
- python - matplotlib 改变每一层 BRG 的颜色
- r - 如何解决“在 fread(text = .) 中:导入 .txt 文件时丢弃的单行页脚
- php - 演示服务器上的多个 laravel
- php - 访问 Docusign-php-client
- javascript - 预先填充的字段拒绝在服务器 DO 上托管的 django 项目中工作
- c# - Azure 功能身份验证 - 可以在没有 AD 的情况下进行吗?