我正在使用一个数据帧,我想对它的数据进行一些测试。特别是,数据帧“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上),但我无法得到它。你有什么建议吗? 谢谢
目前没有回答
相关问题 更多 >
编程相关推荐