我正在使用由连续性列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/

10-14 19:39
查看更多