【发布时间】:2017-06-14 15:01:16
【问题描述】:
假设我有以下 Pandas DataFrame:
id | a1 | a2 | a3 | a4
1 | 3 | 0 | 10 | 25
2 | 0 | 0 | 31 | 15
3 | 20 | 11 | 6 | 5
4 | 0 | 3 | 1 | 7
对于n 的各种值,我想要计算每行中n 连续非零值的非重叠运行次数。期望的输出是:
id | a1 | a2 | a3 | a4 | 2s | 3s | 4s
1 | 3 | 0 | 10 | 25 | 1 | 0 | 0
2 | 0 | 0 | 31 | 15 | 1 | 0 | 0
3 | 20 | 11 | 6 | 5 | 2 | 1 | 1
4 | 0 | 3 | 1 | 7 | 1 | 1 | 0
例如在哪里2s 列中的每个值显示该行中长度为 2 的非重叠游程数,3s 列中的每个值显示相应的长度为 3 的游程数,依此类推。
我想知道是否有任何 Pandas 或 Numpy 方法来处理这个问题?
【问题讨论】:
-
我不明白你所说的“2s 和 3s 对”是什么意思。例如。整个数据框中根本没有 2(除非你算上
id,但我认为这应该是一个索引?) -
对不起我的英语!我的意思是如果连续有 2 个(或 3 个或 4 个)非零值。你有什么建议可以清楚地改写我的问题吗?
-
哦,我明白了。我认为最好的说法就是您在评论中所说的:“连续连续 2 个(或 3 个或 4 个)非零值。”我想您可以将其称为“连续 2 个(或 3 个或 4 个)连续非零值的 run”。 (绝对不是一对。一对只能有两件事。)
-
我试图修复它 :) 谢谢!
-
这有帮助。让我再做一次编辑以进一步澄清它。 (我认为任何进一步的更改都比解释更容易演示。)我完成后,如果您不喜欢它,您可以回滚或再次编辑。
标签: python pandas numpy dataframe