问题描述
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
解决方法
这是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
...