将值列表与python中的范围和索引进行比较
我试图确定一个数据帧中的ID是否与第二个数据帧中的ID匹配,以及这些值是否在第二个数据帧中包含的范围内。我还没有找到这个问题的答案,但是,我的python并不强大,所以如果我错过了一些已经存在的东西,我很抱歉。 下面是datframe的示例将值列表与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.
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