按数据帧顺序计算两个非零数字之间的零数

时间:2020-03-18 05:46:32

标签: python 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 

谢谢!

2 个答案:

答案 0 :(得分:3)

为提高性能,可以使用矢量化的解决方案,该解决方案类似于列的thisSeries.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

答案 1 :(得分:1)

尝试使用cumsum() and cumcount()

df['zeroCumulative'] = df["value"].groupby((df["value"].ne(0)).shift().cumsum()).cumcount()

df:

    value   zeroCumulative
0   70      0
1   127     0
2   101     0
3   0       0
4   0       1
5   0       2
6   73      3
7   0       0
8   55      1
9   0       0