我需要帮助来解决以下问题。 我可以循环执行此操作,但是如果有人可以用pythonic方式解决它,这将很有趣。
假设我们有一个包含生产零件的数据框,每个零件都有许多缺陷。缺陷具有类型,尽管并不是每个部分都存在缺陷。 每个缺陷都有一个严重程度(1到5、5为最差)以及缺陷开始和结束的坐标。缺陷是独立的,可以任意重叠。
如何生成一个数据框,其中包含每个部分的缺陷严重性在该部分上最差的部分?
例如:
如果有3个缺陷 A坐标为10,100,严重性为3; B的坐标为40、50,严重性为5(B完全位于A中); C的坐标为80,120,严重性为4(C与A重叠); 那么我们应该得到一个数据框:
part_id severity start end
1 3 10 40
1 5 40 50
1 3 50 80
1 4 80 120
对于更大的df:
import pandas as pd
df = pd.DataFrame(columns=['part_id', 'defect_type', 'severity', 'start', 'end'],
data=[[1,12, 4,1, 10],
[1,14, 3,5, 100],
[1,10, 1,50, 110],
[1,102,3,1, 10],
[1,10, 2,200,500],
[1,10, 5,300,400],
[1,102,1,100,1000],
[2,11, 4,2, 10],
[2,14, 5,5, 100],
[2,102,1,50,110],
[2,12, 3,1,10],
[2,11, 2,200, 500],
[2,14, 4,350, 400],
[2,102,1,300, 2000]])
part_no = 1的结果将是:
df_result = pd.DataFrame(columns=['part_id', 'defect_type', 'severity', 'start', 'end'],
data=[[1, 4, 1, 10],
[1, 3, 10, 100],
[1, 1,100, 110], # can be combined with next row
[1, 1,110, 200],
[1, 2,200, 300],
[1, 5,300, 400],
[1, 2,400, 500],
[1, 1,500,1000],
])