检查数据帧行子集之间的条件

2024-04-25 20:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个数据帧,我想对它的数据进行一些测试。特别是,数据帧“df”有许多具有不同属性的点:其高度(“Z”列)和称为面积(“a”)的属性。此外,点按“代码”列分组。 这是一个数据帧:

df = pd.DataFrame({'ID' : [3,12,19,20,21,22,25,26,27,87],
                    'CODE': ['A.10','A.10','A.10','B.365','B.365','B.365','B.525','B.525','A.10','A.10'],
                    'Z': [1410,410,860,436,675,645,1220,1200,886,885],
                    'AREA':[213.501,1555.370,200.286,10.754,1.642,1.648,1.722,1.725,504.990,503.030] 
                    })
   ID   CODE     Z      AREA
0   3   A.10  1410   213.501
1  12   A.10   410  1555.370
2  19   A.10   860   200.286
3  20  B.365   436    10.754
4  21  B.365   675     1.642
5  22  B.365   645     1.648
6  25  B.525  1220     1.722
7  26  B.525  1200     1.725
8  27   A.10   886   504.990
9  87   A.10   885   503.030

首先,我想根据点所属的代码对点进行分组。其次,我想根据它们的高度(Z属性)对点进行排序

df2=df.groupby(['CODE']).apply(lambda x: (x.sort_values('Z', ascending=False)))      
         ID   CODE     Z      AREA
CODE                              
A.10  0   3   A.10  1410   213.501
      8  27   A.10   886   504.990
      9  87   A.10   885   503.030
      2  19   A.10   860   200.286
      1  12   A.10   410  1555.370
B.365 4  21  B.365   675     1.642
      5  22  B.365   645     1.648
      3  20  B.365   436    10.754
B.525 6  25  B.525  1220     1.722
      7  26  B.525  1200     1.725

此时,每个点的“Z”应比前几行中的所有点小,“A”应比前几行中的所有点大。对于“Z”属性,这当然是正确的,因为我已经将点从higtest排序到最小,因为“A”应该是相反的,并且每行的面积应该增加。然而,这并不总是正确的。因此,我想创建另一列,在其中为每一行放置测试未通过的前几行的ID

         ID   CODE     Z      AREA Test
CODE                              
A.10  0   3   A.10  1410   213.501 
      8  27   A.10   886   504.990 
      9  87   A.10   885   503.030 27
      2  19   A.10   860   200.286 27,87
      1  12   A.10   410  1555.370
B.365 4  21  B.365   675     1.642
      5  22  B.365   645     1.648
      3  20  B.365   436    10.754
B.525 6  25  B.525  1220     1.722
      7  26  B.525  1200     1.725

我不知道如何完成最后一步,可能是通过一个双循环,循环for(一个在代码上,另一个在Z上),但我无法得到它。你有什么建议吗? 谢谢