如何计算从右到零的连续列数,直到出现第一个非零元素

Ale*_*ban 5 python reverse sum pandas cumsum

假设我有以下数据帧:

   C1 C2 C3 C4  
0  1  2  3  0  
1  4  0  0  0  
2  0  0  0  3  
3  0  3  0  0 
Run Code Online (Sandbox Code Playgroud)

然后我想添加另一列,使其显示从右边连续出现的零值列的数量.新专栏将是:

  Cnew  
0 1  
1 3  
2 0  
3 2  
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 5

您可以使用:

  • 通过反序iloc[::-1]
  • 获取cumsum每行(axis=1)
  • 检查eq并获得sumTrue小号

df['new'] = df.iloc[:,::-1].cumsum(axis=1).eq(0).sum(axis=1)
print (df)
   C1  C2  C3  C4  new
0   1   2   3   0    1
1   4   0   0   0    3
2   0   0   0   3    0
3   0   3   0   0    2
Run Code Online (Sandbox Code Playgroud)
print (df.iloc[:,::-1])
   C4  C3  C2  C1
0   0   3   2   1
1   0   0   0   4
2   3   0   0   0
3   0   0   3   0


print (df.iloc[:,::-1].cumsum(axis=1))
   C4  C3  C2  C1
0   0   3   5   6
1   0   0   0   4
2   3   3   3   3
3   0   0   3   3

print (df.iloc[:,::-1].cumsum(axis=1).eq(0))
      C4     C3     C2     C1
0   True  False  False  False
1   True   True   True  False
2  False  False  False  False
3   True   True  False  False
Run Code Online (Sandbox Code Playgroud)