pandas - 具有重叠坐标的 Pandas double(?) 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],
])
解决方案
推荐阅读
- java - Java 子类与超类
- node.js - 如何将参数传递给sails-hook-cron中的作业
- python - 根据每个中的空值数选择数据框列
- cron - 如何自动运行ffmpeg命令
- jinja2 - Jinja2 - 拆分字符串
- c# - 在 Visual C# 中运行时编译
- multithreading - 如何停止新对象中的 goroutine?
- active-directory - LDAP Active Directory 是否可以具有不同的 sn 和 givenName 但名称相同
- regex - VBA RegEx - 匹配所有非字母数字字符但忽略空格
- mysql - 在 Master 和 Slave 上具有不同列定义的 Mysql 复制