python - 依次计算数据帧中两个非零数之间的零数

标签 python pandas

我有一个 pandas 数据框,我正在尝试计算每个数字之前零的数量,直到出现非零数字并将其捕获到下一列中。我如何使用 Pandas 执行此操作?

这就是输出需要在 zeroCumulative 列中的方式。例如,101之前的零个数是073之前的零个数是3等等。还需要计算任何零之前的零数。

value zeroCumulative 
70
127         0 
101         0 
0           0 
0           1 
0           2 
73          3 
0           0 
55          1 
0           0 

提前致谢!

最佳答案

为了提高性能,可以使用矢量化解决方案,这类似于 this解决方案 Series.shift列并通过 0 进行比较:

a = df['value'].shift().eq(0)
b = a.cumsum()
df['new'] = b.sub(b.mask(a).ffill().fillna(0)).astype(int)
print (df)
   value  zeroCumulative  new
0     70               0    0
1    127               0    0
2    101               0    0
3      0               0    0
4      0               1    1
5      0               2    2
6     73               3    3
7      0               0    0
8     55               1    1
9      0               0    0

关于python - 依次计算数据帧中两个非零数之间的零数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60734125/

相关文章:

Python:从时间戳到日期时间

python - 如何在Python中使用sqlalchemy在查询中创建sql server表变量

python - 如何在不循环的情况下将 python JSON 行转换为数据帧列

python - 我如何在 Python 中序列化 json?

python - 使用 ctypes 创建 Objective-C 结构?

python - 如何通过引用pandas中的日期来提取

python - 如何在 Pandas 上绘制多行?

python - 检查字符串中的空格

python - 注销 django web 应用程序重定向到 django 管理员注销页面。这是怎么回事?

python - 如何展开 DataFrame 列中的列表?