gpt4 book ai didi

python - 计算 Pandas 中的重复 block

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:01 24 4
gpt4 key购买 nike

我有以下数据框,我试图用一个数字标记整个 block ,该数字基于到目前为止基于类列看到的相似 block 的数量。连续的类值被赋予相同的数字。如果以后出现相同的类 block ,则该数字将递增。如果出现新的类 block ,则将其初始化为 1

df = DataFrame(zip(range(10,30), range(20)), columns = ['a','b'])
df['Class'] = [np.nan, np.nan, np.nan, np.nan, 'a', 'a', 'a', 'a', np.nan, np.nan,'a', 'a', 'a', 'a', 'a', np.nan, np.nan, 'b', 'b','b']

a b Class
0 10 0 NaN
1 11 1 NaN
2 12 2 NaN
3 13 3 NaN
4 14 4 a
5 15 5 a
6 16 6 a
7 17 7 a
8 18 8 NaN
9 19 9 NaN
10 20 10 a
11 21 11 a
12 22 12 a
13 23 13 a
14 24 14 a
15 25 15 NaN
16 26 16 NaN
17 27 17 b
18 28 18 b
19 29 19 b

示例输出如下所示:

    a   b   Class   block_encounter_no
0 10 0 NaN NaN
1 11 1 NaN NaN
2 12 2 NaN NaN
3 13 3 NaN NaN
4 14 4 a 1
5 15 5 a 1
6 16 6 a 1
7 17 7 a 1
8 18 8 NaN NaN
9 19 9 NaN NaN
10 20 10 a 2
11 21 11 a 2
12 22 12 a 2
13 23 13 a 2
14 24 14 a 2
15 25 15 NaN NaN
16 26 16 NaN NaN
17 27 17 b 1
18 28 18 b 1
19 29 19 b 1

最佳答案

解决方案 mask :

df['block_encounter_no'] = (df.Class != df.Class.shift()).mask(df.Class.isnull())
.groupby(df.Class).cumsum()
print (df)
a b Class block_encounter_no
0 10 0 NaN NaN
1 11 1 NaN NaN
2 12 2 NaN NaN
3 13 3 NaN NaN
4 14 4 a 1.0
5 15 5 a 1.0
6 16 6 a 1.0
7 17 7 a 1.0
8 18 8 NaN NaN
9 19 9 NaN NaN
10 20 10 a 2.0
11 21 11 a 2.0
12 22 12 a 2.0
13 23 13 a 2.0
14 24 14 a 2.0
15 25 15 NaN NaN
16 26 16 NaN NaN
17 27 17 b 1.0
18 28 18 b 1.0
19 29 19 b 1.0

关于python - 计算 Pandas 中的重复 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38652683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com