pandas - 以可变间隔滚动熊猫数据框中的列的总和
问题描述
我有一个代表 DF 索引位置的索引号列表。list_index = [2,7,12]
我想通过遍历 list_index 中的每个数字并对索引点之间的计数求和(并在每个索引点重新开始计数为 0),从 DF 中的单个列求和。这是一个小例子。
所需的输出在 OUTPUT 列中,每次从 COL 1 中再有 1 时,该列就会递增,并在 list_index 中数字之后的位置上的 0 处重新开始计数。
我能够让它与循环一起工作,但 DF 中有数百万行,循环运行需要一段时间。似乎我需要一个带有总和的 lambda 函数,但我需要在索引中输入起点和终点。
像 lambda x:x.rolling(start_index, end_index).sum() 这样的东西?谁能帮我解决这个问题。
解决方案
您可以尝试累积和并仅检索 1 个值相关信息,不同间隔的滚动和是不可能的
a = df['col'].eq(1).cumsum()
df['output'] = a - a.mask(df['col'].eq(1)).ffill().fillna(0).astype(int)
出去:
col output
0 0 0
1 1 1
2 1 2
3 0 0
4 1 1
5 1 2
6 1 3
7 0 0
8 0 0
9 0 0
10 0 0
11 1 1
12 1 2
13 0 0
14 0 0
15 1 1
推荐阅读
- c# - 注册 Linq.Expression.Optimizer 以在全球范围内工作
- algorithm - 拓扑排序卡恩算法 BFS 或 DFS
- javascript - 在 React 中覆盖元素类型
- python - django 在表中获取不同的记录似乎选择了随机行
- firebase-hosting - Firebase 这是设置缓存的正确方法
- python - Python subprocess.Popen() 找不到可执行文件
- python - Matplotlib,使用用户输入在循环中绘制什么
- c# - 如何通过移位将字节插入数组?
- sql - 如何计算低于 SQL 中第 10 个百分位的行数(及其百分比)?
- aws-amplify - 有没有办法在 Amplify 中的 lambda 函数之间共享环境变量和秘密?