如何在Python中迭代一个数据框的每一行并与另一数据框的行进行比较?

时间:2019-10-21 20:36:20

标签: python pandas loops dataframe comparison

我有两个数据框:

DF1:

ID     v1           v2         v3
289  1455.0        2.0        0.62239  
289  1460.0        0.0        0.46037  
289  1465.0        4.0        0.41280 
290  1470.0        0.0        0.39540 
290  1475.0        2.0        0.61809 
290  1475.0        2.0        0.61809

DF2:

ID     v1           v2         v3
289  1423.0        2.0        0.62239  
289  142Q.0        0.0        0.46037  
289  14FW.0        4.0        0.41280  
290  14Q3.0        0.0        0.39540  
290  1453.0        2.0        0.61809 
290  1454.0        2.0        0.61809

我想用DF2中的每一行迭代DF1中的每一行,看看它是否在DF2中,就像这样:

for row in results_01.iterrows():
    diff = []
    if row not in results_02:
        add different one to 'diff'
        print(diff)

我了解逻辑,但是不确定如何做到这一点,这是Python的新手,有人可以帮助我吗?非常感谢。

3 个答案:

答案 0 :(得分:1)

您可以通过“内部”合并轻松做到这一点。

<div class="container">
  <div class="content">
    <div class="a">Lorem ipsum dolor sit amet consectetur adipisicing elit. </div>
    <div class="b">Lorem ipsum dolor sit amet consectetur adipisicing elit.</div>
    <div class="c">Lorem ipsum dolor sit amet consectetur adipisicing elit. </div>
  </div>
</div>

编辑:

事实证明,需要的是df1中而不是df2中的行,而不是交集。 在这种情况下,应该使用isin pandas方法。 这是link处理的问题。

答案 1 :(得分:0)

一种方法(可能不是最有效的)是将数据帧附加在一起,然后删除重复项,如下所示:

full_df = df1.append(df2)
full_df = full_df.drop_duplicates(keep=False)

答案 2 :(得分:0)

您拥有的代码块看起来与您在python中所做的非常接近。从一个数据帧中移出一行,然后遍历另一个数据帧以寻找匹配项。

for index, row in results_01.iterrows():
    diff = []
    compare_item = row['col_name'] 
    for index, row in results_02.iterrows():
       if compare_item == row['compare_col_name']:
           diff.append(compare_item, row['col_name']
    return diff 

在这里,我要从一个数据帧的一行中获取特定的列值,并将其与另一个数据帧中的另一个值进行比较