gpt4 book ai didi

python - Pandas:在条件后创建指示列

转载 作者:行者123 更新时间:2023-12-02 18:12:51 24 4
gpt4 key购买 nike

import numpy as np
import pandas as pd
df = pd.DataFrame({
'cond': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B','B', 'B', 'B', 'B', 'B','B','B'],
'Array': ['S', 'S', 'TT', 'TT','S', 'S', 'TT', 'TT','S', 'S', 'TT', 'TT','S', 'S', 'TT', 'TT','SS','TT'],
'Area': [3.0, 2.0, 2.88, 1.33, 2.44, 1.25, 1.53, 1.0, 0.156, 2.0, 2.4, 6.3, 6.9, 9.78, 10.2, 3.0, 16.0, 19.0]
})
print(df)

我正在尝试制作一个指示器列,指示特定大小的区域是否已经发生。例如,如果条件。是 A,那么我想指出第一次面积 <=1.5(以及之后的所有数据点),并且如果 cond.是 B,则表示第一次面积 >10(以及之后的所有点)。最终结果应如下所示:

   cond Array    Area   Indicator
0 A S 3.000 0
1 A S 2.000 0
2 A TT 2.880 0
3 A TT 1.330 1
4 A S 2.440 1
5 A S 1.250 1
6 A TT 1.530 1
7 A TT 1.000 1
8 A S 0.156 1
9 B S 2.000 0
10 B TT 2.400 0
11 B TT 6.300 0
12 B S 6.900 0
13 B S 9.780 0
14 B TT 10.200 1
15 B TT 3.000 1
16 B SS 16.000 1
17 B TT 19.000 1

我查看的许多其他示例都是指示 A 的面积是否 <=1.5,或者指示它第一次发生,但不指示它第一次发生并指示之后的所有数据点。这个想法是,一旦我的状况达到某个区域,它就会进入一个不同的“阶段”,我试图指出“A”何时进入并停留在该阶段(以及 B 的等效阶段)。

最佳答案

您可以编写条件,然后按 cond 分组并使用 cumsum + clip:

mask = (df['cond'].eq('A') & df['Area'].lt(1.5)) | (df['cond'].eq('B') & df['Area'].gt(10))
df['Indicator'] = mask.groupby(df['cond']).cumsum().clip(0, 1)

输出:

>>> df
cond Array Area Indicator
0 A S 3.000 0
1 A S 2.000 0
2 A TT 2.880 0
3 A TT 1.330 1
4 A S 2.440 1
5 A S 1.250 1
6 A TT 1.530 1
7 A TT 1.000 1
8 A S 0.156 1
9 B S 2.000 0
10 B TT 2.400 0
11 B TT 6.300 0
12 B S 6.900 0
13 B S 9.780 0
14 B TT 10.200 1
15 B TT 3.000 1
16 B SS 16.000 1
17 B TT 19.000 1

关于python - Pandas:在条件后创建指示列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72034456/

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