python - 为 'group number' 和 '0' s 的 pandas 数据框列创建 '1' 列

标签 python pandas dataframe

如何获取下面的数据框

dd = pd.DataFrame({'val':[0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0],
             'groups':[1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,'ignore','ignore']})

     val    groups
0     0       1
1     0       1
2     1       1
3     1       1
4     1       1
5     0       2
6     0       2
7     0       2
8     0       2
9     1       2
10    1       2
11    0       3
12    1       3
13    1       3
14    1       3
15    1       3
16    0  ignore
17    0  ignore

我有一个系列df.val有值[0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0] .
如何创建 df.groups 来自 df.val

第一0,0,1,1,1将建群1 ,(即从开始到 0 之后出现下一次 1)
0,0,0,0,1,1将建群2 ,(增量组编号,从上一个组结束的位置开始,直到 0 之后出现下一个 1),...等

任何人都可以帮忙吗?

最佳答案

首先测试0之后的下一个值是否为1,并按Series.cumsum的总和创建组:

s = (dd['val'].eq(0) & dd['val'].shift().eq(1)).cumsum().add(1)

如果数据的最后一个值为 0numpy.where,则将最后一组转换为忽略 :

mask = s.eq(s.max()) & (dd['val'].iat[-1] == 0)
dd['new'] = np.where(mask, 'ignore', s)
print (dd)
    val  groups     new
0     0       1       1
1     0       1       1
2     1       1       1
3     1       1       1
4     1       1       1
5     0       2       2
6     0       2       2
7     0       2       2
8     0       2       2
9     1       2       2
10    1       2       2
11    0       3       3
12    1       3       3
13    1       3       3
14    1       3       3
15    1       3       3
16    0  ignore  ignore
17    0  ignore  ignore

关于python - 为 'group number' 和 '0' s 的 pandas 数据框列创建 '1' 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59410598/

相关文章:

python - 多个消费者,是否可以克隆一个队列(gevent)?

r - 为什么 apply 将数据帧中的逻辑转换为 5 个字符的字符串?

R:dplyr 和 row_number() 未按预期枚举

r - 根据R中目标值的下限和上限连接两个数据帧

python - 使用 python requests 库网站总是挂起

python - 使用预测模型估算缺失值

python - 如何可视化 Pandas Dataframe 中的时间数据?

python - 使用 Facebook Prophet 同时预测多个变量

python - Pandas read_csv usecols 接受不存在的列名

python - Pandas ,删除最后一个 '_' 之后的所有内容