Выберите строки pd.DataFrame с наибольшим пересечением с точки зрения значений глубины (конкретные столбцы) - PullRequest
1 голос
/ 05 ноября 2019
+------------+-----+--------+-----+-------------+
| Meth.name  |  Min| Max    |Layer| Global name |
+------------+-----+--------+-----+-------------+
|   DTS      | 2600| 3041.2 | AC1 |  DTS        |
|   GGK      | 1800| 3200.0 | AC1 |  DEN        |
|   DTP      | 700 | 3041.0 | AC2 |  DT         |
|   DS       | 700 | 3041.0 | AC3 |  CALI       |
|   PF1      | 2800| 3012.0 | AC3 |  CALI       |
|   PF2      | 3000| 3041.0 | AC4 |  CALI       |
+------------+-----+--------+-----+-------------+

Мы должны отбросить дублированные строки в столбце «Глобальное имя», но определенным образом: мы хотим выбрать строку, которая даст наибольшее пересечение с диапазоном, рассчитанным с использованием максимального значения столбца "Min" и минимального значенияесли столбец "Max" из недублированных строк . В приведенном выше примере этот диапазон будет [2600.0;3041.0], поэтому мы хотим оставить только строку с ['Meth.name] == 'DS', и общий результат должен быть таким:

+------------+-----+--------+-----+-------------+
| Meth.name  |  Min| Max    |Layer| Global name |
+------------+-----+--------+-----+-------------+
|   DTS      | 2600| 3041.2 | AC1 |  DTS        |
|   GGK      | 1800| 3200.0 | AC1 |  DEN        |
|   DTP      | 700 | 3041.0 | AC2 |  DT         |
|   DS       | 700 | 3041.0 | AC3 |  CALI       |
+------------+-----+--------+-----+-------------+

Эта проблема, конечно, может быть решена в несколько итераций (вычислить интервал на основе недублированныхстроки, а затем итеративно выбирайте только те строки (из дублированных), которые дадут наибольшее пересечение), но я пытаюсь найти наиболее эффективный подход. Спасибо

...