我有一个pandas数据框,我试图在每个数字之前计算零的数目,直到出现非零数字并将其捕获到下一列中。如何使用熊猫来做到这一点?
这是将输出保留在zeroCumulative
列中的方式。例如,101
之前的零数目为0
,73
之前的零数目为3
,依此类推。还需要计算零之前的零数目。
value zeroCumulative
70
127 0
101 0
0 0
0 1
0 2
73 3
0 0
55 1
0 0
谢谢!
答案 0 :(得分:3)
为提高性能,可以使用矢量化的解决方案,该解决方案类似于列的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
答案 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