使用pandas

时间:2017-01-20 22:01:19

标签: python pandas

我正在寻找一种方法来创建一个匹配数据帧中给定值的函数,这样如果在A列中找到匹配项,请检查B列是否匹配。我已在A列和B列中创建了要搜索的值列表。

      A       B       C       D 
0   0.65    12.05   253.41  1.53

1   0.76    9.64    206.97  1.25

2   0.80    9.82    110.98  0.67

3   0.81    12.15   637.04  386.43

我目前用来执行此操作的代码相当于:

Sample = pd.read_csv("tableabove.csv")
Database = pd.read_csv("Databasefile.csv")
SearchVals_A = list(Sample["A"])
SearchVals_B = list(Sample["B"])
HitsColA = [Database[Database["A"].apply(np.isclose,b=i,atol=0.02)for i in SearchVals_A]
HitsColA2 = pd.concat(HitsColA)
HitsColB = [HitsColA2[HitsColA2["B"].apply(np.isclose,b=i,atol=0.02)for i in SearchVals_B]
HitsColB2 = pd.concat(HitsColB)
Final = HitsColB2.drop_duplicates(["A"])

这会创建一个匹配值的数据框,因此如果在匹配的A列中找到一个值,则会在该列数据框中搜索B列中的给定值,但我无法找到一种方法来关联&#34 ; BOTH值必须匹配。当我运行此方法时,它会在A列中找到0.76匹配,然后在列B中独立搜索值。但是如果这两个值在现实生活中相关联,那么如果索引1有一个值,它将在结果中给出错误命中它也在列B列表中的值。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用.tolist()将列A和B更改为python列表。

然后,您可以简单地遍历每个列表并附加到包含所有匹配元素的新列表:

matching_vals = []

for val in specified_vals_list:
    if val in list_A:
        if val in list_B:
            matching_vals.append(val)
        else:
            continue
    else:
        continue

print (matching_vals)