首页 > 解决方案 > pandas DataFrame 列中特定值的连续行的累积计数

问题描述

我有这个数据框,想添加另一列 cumcounts 直到它不等于星*号,然后在星号重新出现时从 1 再次继续。

    Star
0   *
1   *
2   *
3   *
4   s
5   s
6   *
7   *

输出期望:

    Star  Number
0   *     1
1   *     2
2   *     3
3   *     4
4   s     NaN
5   s     NaN
6   *     1
7   *     2

标签: pythonpandasdataframegroup-bypandas-groupby

解决方案


这是一个简单的groupby掩蔽操作。

m = df.Star.ne('*')
# Big thanks to @W-B for the bug fix!
df['Number'] = df[~m].groupby(m.cumsum()).cumcount().add(1)


df
  Star  Number
0    *     1.0
1    *     2.0
2    *     3.0
3    *     4.0
4    s     NaN
5    s     NaN
6    *     1.0
7    *     2.0

推荐阅读