Форматирование условия между двумя фреймами данных, во втором фрейме данных я хочу, чтобы замечание было истинным, если условие допустимо с первым фреймом данных

#python #dataframe #formatting #conditional-statements

#python #фрейм данных #форматирование #условные операторы

Вопрос:

 import pandas as pd
rows = [] #create rows
offset=50
for i in range(0,1000,offset):  
     rows.append([i, "   "])
df = pd.DataFrame(rows, columns=["offset","Remark"]) # First data frame 
  

 First Data Frame
      offset Remark
0        0       
1       50       
2      100       
3      150       
4      200       
5      250       
6      300       
7      350       
8      400       
9      450       
10     500       
11     550       
12     600       
13     650       
14     700       
15     750       
16     800       
17     850       
18     900       
19     950  

#  second data frame imported from excel , which is as below

   Start  End
0     50  100
1    300  400
2    450  600
3    800  950
  

Ожидаемый результат требует, как показано ниже — в столбце смещения «Если значение находится между или равно началу и концу, то столбец примечания будет отмечен как True»

     offset       Remark
0        0       False  
1       50       True 
2      100       True 
3      150       False
4      200       False
5      250       False
6      300       True
7      350       True
8      400       True
9      450       True
10     500       True
11     550       True
12     600       True
13     650       False
14     700       False
15     750       False
16     800       True
17     850       True
18     900       True
19     950       True
  

Ответ №1:

Вот решение с DataFrame.query ,

 query = (
    " | ".join(f"{v['Start']} <= offset <= {v['End']}" 
               for _, v in df2[['Start', 'End']].iterrows())
)

# query: 50 <= offset <= 100 | 300 <= offset <= 400 | ...
  

 index_ = df.query(query).index

df['Remark'] = False
df.loc[index_, 'Remark'] = True
  

     offset  Remark
0        0   False
1       50    True
2      100    True
3      150   False
4      200   False
5      250   False
6      300    True
...