我正在使用由连续性列df ['continuity']和列组df ['group']组成的数据框。
两者都是二进制列。
我想添加一个额外的列“ group_id”,使连续的1s行具有相同的整数值,其中第一组行具有
1,然后2,依此类推。每当行的连续性值为0时,计数应重新从1开始。
由于这个问题相当具体,因此我不确定如何解决此向量化问题。在下面的示例中,前两个
我想要的列是输入,而列是输出。
continuity group group_id
1 0 0
1 1 1
1 1 1
1 1 1
1 0 0
1 1 2
1 1 2
1 1 2
1 0 0
1 0 0
1 1 3
1 1 3
0 1 1
0 0 0
1 1 1
1 1 1
1 0 0
1 0 0
1 1 2
1 1 2
最佳答案
我相信您可以使用:
#get unique groups in both columns
b = df[['continuity','group']].ne(df[['continuity','group']].shift()).cumsum()
#identify first 1
c = ~b.duplicated() & (df['group'] == 1)
#cumulative sum of first values only if group are 1, else 0 per groups
df['new'] = np.where(df['group'] == 1,
c.groupby(b['continuity']).cumsum(),
0).astype(int)
print (df)
continuity group group_id new
0 1 0 0 0
1 1 1 1 1
2 1 1 1 1
3 1 1 1 1
4 1 0 0 0
5 1 1 2 2
6 1 1 2 2
7 1 1 2 2
8 1 0 0 0
9 1 0 0 0
10 1 1 3 3
11 1 1 3 3
12 0 1 1 1
13 0 0 0 0
14 1 1 1 1
15 1 1 1 1
16 1 0 0 0
17 1 0 0 0
18 1 1 2 2
19 1 1 2 2
关于python - 识别具有相同列值的组并计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48241048/