如何获取下面的数据框
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)
如果数据的最后一个值为 0
且 numpy.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/