熊猫double(?)groupby与重叠的坐标

时间:2020-02-26 10:51:53

标签: pandas pandas-groupby

我需要帮助来解决以下问题。 我可以循环执行此操作,但是如果有人可以用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],
                   ])

0 个答案:

没有答案