python 填充分组变量panda Dataframe

ylamdve6  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(149)

我有一个panda Dataframe ,它有一个名为doc_ID的id列和一个布尔列,如果某个值低于某个阈值,布尔列就会报告,如下所示:

df = pd.DataFrame({'doc_ID': [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3],
                  'below_threshold': [False, False, False, False, True, False, False, True, False, False,
                                     False, False, False, False, False, False, False, True, False, False]})

我尝试在每个doc_ID中创建一个新的分组ID,它将从第一个False值开始按顺序扩展,直到并包括第一个True值。

doc_ID  below_threshold  new_group
0        1            False          1
1        1            False          1
2        1            False          1
3        1            False          1
4        1             True          1
5        1            False          2
6        2            False          3
7        2             True          3
8        2            False          4
9        2            False          4
10       2            False          4
11       2            False          4
12       3            False          5
13       3            False          5
14       3            False          5
15       3            False          5
16       3            False          5
17       3             True          5
18       3            False          6
19       3            False          6
jq6vz3qz

jq6vz3qz1#

IIUC,使用:

m1 = ~df['below_threshold']
m2 = df.groupby('doc_ID')['below_threshold'].shift(fill_value=True)
df['new_group'] = (m1&m2).cumsum()

输出:

doc_ID  below_threshold  new_group
0        1            False          1
1        1            False          1
2        1            False          1
3        1            False          1
4        1             True          1
5        1            False          2
6        2            False          3
7        2             True          3
8        2            False          4
9        2            False          4
10       2            False          4
11       2            False          4
12       3            False          5
13       3            False          5
14       3            False          5
15       3            False          5
16       3            False          5
17       3             True          5
18       3            False          6
19       3            False          6

相关问题