首页 > 解决方案 > 当列具有非零值时重置计数器

问题描述

我有一个带有列的数据框。

  A   
  0.0
  0.0
  0.0
  12.0
  0.0
  0.0
  34.0
  0.0
  0.0
  0.0
  0.0
  11.0

我想要这样的输出带有一个计数器列。我希望计数器在非零值后重新启动。对于每个非零值之后的行,计数器应再次初始化,然后应递增。

 A   Counter

 0.0   1
 0.0   2
 0.0   3
 12.0  4
 0.0   1
 0.0   2
 34.0  3
 0.0   1
 0.0   2
 0.0   3
 0.0   4
 11.0  5

标签: pythonpandasdataframe

解决方案


让我们尝试cumsum创建groupby密钥,[::-1]这里是相反的顺序

df['Counter'] = df.A.groupby(df.A.ne(0)[::-1].cumsum()).cumcount()+1
Out[442]: 
0     1
1     2
2     3
3     4
4     1
5     2
6     3
7     1
8     2
9     3
10    4
11    5
dtype: int64

推荐阅读