Проверьте условие между заданным диапазоном - PullRequest
0 голосов
/ 16 июня 2020

Я читаю файл CSV:

df = pd.read_csv('///Example.csv')


  RFMin RFMax       

  1000  3333    
  2000  5125.5        
  2000  8800      
  4000  6000        
  1000  3000      

Я создал другой DataFrame, который выглядит следующим образом

 MG = pd.DataFrame({'RFMin': [660, 2700, 8600], 'RFMax': [750, 4000, 16000]})

Я хочу проверить, что каждый RFMin и RFMax находятся в диапазоне от df подпадает под каждый RFMin, а RFMax из кадра данных MG

Пример:

   check 1000-3333  falls under each 660-750
                                     2700-4000
                                     8600- 16000

   check 2000-5125.5  falls under each 666-750
                                     2700-4000
                                     8600- 16000

Вот мой код:

import pandas as pd

import numpy as np

import csv

df = pd.read_csv(///Example.csv)

a = df['RFMin']
b = df['RFmax']

MG = pd.DataFrame({'RFMin': [660, 2700, 8600], 'RFMax': [750, 4000, 16000]})

RFMin = MG['RFMin']
RFMax = MG['RFMax']   

как мне написать оператор if и else примерно так:

if ((a < RFMin) & (RFMin< b < RFMax )):

   print ('Number is Overlapping at beginning', ((b-RFFMin)/(b-a)))

if ((RFMin > a < RFMax) & (RFMin > b < RFMax)):
   Print ('Number is in between given range ')

if ((RFMin< a < RFmax) & (b > RFmax )):
   print ('Number is overlapping at the end', ((RFMax-a)/(b-a)))

1 Ответ

0 голосов
/ 17 июня 2020

Самый простой вариант - пройти l oop через каждую строку в df и сравнить ее с каждой строкой в ​​MG. Это стоит вам двух циклов -

df = pd.DataFrame({'RFMin': [1000, 2000, 2000, 4000, 1000], 'RFMax': [3333, 5125.5, 8800, 6000, 3000]})
MG = pd.DataFrame({'RFMin': [660, 2700, 8600], 'RFMax': [750, 4000, 16000]})

for idx1, row1 in df.iterrows():
    for idx2, row2 in MG.iterrows():
        if row1.RFMin < row2.RFMin and row2.RFMin < row1.RFMax < row2.RFMax:
            print('Number is Overlapping at beginning', ((row1.RFMax - row2.RFMin) / (row1.RFMax - row1.RFMin)))
        if row2.RFMin > row1.RFMin > row2.RFMax and row2.RFMin > row1.RFMax < row2.RFMax:
            print('Number is in between given range ')
        if row2.RFMin < row1.RFMin < row2.RFMax and row1.RFMax > row2.RFMax:
            print('Number is overlapping at the end', ((row2.RFMax - row1.RFmin) / (row1.RFMax - row1.RFMin)))

Я только что добавил тот же лог c из вопроса. Я не знаю, правильно ли это, потому что здесь нет условия остановки. Но основная идея c состоит в том, чтобы l oop через один df внутри другого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...