【发布时间】:2020-03-27 18:24:12
【问题描述】:
我有一个如下所示的 pandas 数据框,其中包含“type”和“val0”列。
type val0
0 0
0 0
0 0
1 1
1 3
0 0
0 0
0 0
0 0
1 3
0 0
“类型”列可以是 0 或 1,而 val0 只有 type == 1 才有有趣的值。
我正在尝试创建两列 val1 和 val2。它们的定义方式类似:
- 对于 val1,我想找到至少一行类型 1 的连续出现,取 val0 的总和作为出现次数,并使用总和填充上一次出现类型 1 到最后一次之间的列连续出现的行。
- 对于 val2,我想找到至少一行类型 1 的连续出现,取 val0 中的最小值作为出现次数,并使用 min 填充从连续出现的第一行到第类型 1 的下一次出现。
使用 0 作为 val1 和 val2 的默认值,我会得到上述数据帧的输出:
type val0 val1 val2
0 0 4 0
0 0 4 0
0 0 4 0
1 1 4 1
1 3 4 1
0 0 3 1
0 0 3 1
0 0 3 1
0 0 3 1
1 3 3 3
0 0 0 3
由于第 4、5 和 10 行的 type == 1,
- 对于第 1-5 行,val1 为 1+3 = 4,对于第 6-10 行,val1 为 3
- 对于第 4-9 行,val2 为 min(1,3) = 1,对于第 10-11 行,则为 3
什么是执行此操作的有效方法?我的实际数据框有几百万行,我想创建许多列,如 val1 和 val2,它们使用类型 1 行的不同聚合。
【问题讨论】: