将值列表与python中的范围和索引进行比较

将值列表与python中的范围和索引进行比较,python,pandas,dataframe,range,series,Python,Pandas,Dataframe,Range,Series,我试图确定一个数据帧中的ID是否与第二个数据帧中的ID匹配,以及这些值是否在第二个数据帧中包含的范围内。我还没有找到这个问题的答案,但是,我的python并不强大,所以如果我错过了一些已经存在的东西,我很抱歉。 下面是datframe的示例 import numpy as np import pandas as pd df1 = pd.DataFrame({ 'ID' : pd.Series(["A","A","C","C"]), 'Pos' : pd.

我试图确定一个数据帧中的ID是否与第二个数据帧中的ID匹配,以及这些值是否在第二个数据帧中包含的范围内。我还没有找到这个问题的答案,但是,我的python并不强大,所以如果我错过了一些已经存在的东西,我很抱歉。 下面是datframe的示例

import numpy as np
import pandas as pd

df1 = pd.DataFrame({ 'ID' : pd.Series(["A","A","C","C"]),
                    'Pos' : pd.Series([10, 60, 63, 105], dtype='int32')})

df2 = pd.DataFrame({ 'ID' : pd.Series(["A","B","C","C","D"]),
                    'Start' : pd.Series([10, 40, 61, 100, 250], dtype='int32'),
                    'End' : pd.Series([12, 59, 62, 200, 300], dtype='int32')})
因此,对于df1中的每一行,我想检查ID是否包含在df2中,如果是,df1中的Pos是否在df2中的开始到结束的范围内。 i、 e

IIUC:


谢谢,但这不会检查Pos是否在df2的开始和结束范围内。值60则不然。
for value in df1["Pos"]:
    tmp_start=value >= df2["Start"]
    tmp_end=value <= df2["End"]
    tmp_ID=df1[df1['Pos']==[value]]["ID"].to_string(index=False) == df2["ID"]
    if any(tmp_start.multiply(tmp_end).multiply(tmp_ID)):
        print "Do Something" + value
def range_test(x):
    return range(x[1], (x[2]+1))

df2 = df2.apply(range_test, axis=1) df2 = [st for row in cov for st in
row] df2 = list(set(df2.sort())) df1['Pos'].isin(df2)
In [34]: df1[(df1.ID.isin(df2.ID))&(df1.index.isin(df2.index))]
Out[34]: 
  ID  Pos
0  A   10
1  A   60
2  C   63
3  C  105