识别具有相同列值的组并对其进行计数

时间:2018-01-13 14:56:20

标签: python pandas vectorization

我正在使用数据框,其中包含连续性列df ['连续性']和列组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

1 个答案:

答案 0 :(得分: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