具有多种条件的python中的Vlookup

时间:2019-01-19 15:39:03

标签: python pandas vlookup

我在Python中从csv文件加载了两个数据帧。

其中之一包含以下类型的数据:

 Well   Zones   Inflow   
 E18    A       0.45
 E23    B       0.33
 E25    C       0.2
 E18    B       0.2
 E23    A       0.67
 E25    D       0.12
 E23    B       0.2
 E18    A       0.67
 E25    D       0.12

和另一个:

 Well   Zones   Distance
 E18    A       5.3
 E23    B       2.1
 E25    C       4.8
 E18    B       5.4
 E23    A       2.3
 E25    D       5.5

我需要做的是根据“ Well”和“ Zones”两个条件匹配两个数据框,以更新第一个数据框,如下所示:

 Well   Zones   Inflow   Distance
 E18    A       0.45       5.3
 E23    B       0.33       2.1
 E25    C       0.2        4.8
 E18    B       0.2        5.4
 E23    A       0.67       2.3
 E25    D       0.12       5.5

从上面的示例来看,这似乎是微不足道的,因为在此仅出于对我的问题的描述而将其包括在内。实际数据是一个非常大的文件,原始文件中的数据被重新排列。

这是我过去仅根据一个条件进行匹配的方法,它非常有效:

   df1.insert(13, 'Distance', df1['Well'].map(df2.set_index('Well')['Distance']))

*** 13是从

插入匹配数据的列

但是,我需要的是用于匹配两个数据帧的相同(或任何其他方式),但是具有2个或更多条件(因为取决于区域和距离的不同),因此,不仅“好”而且“好” “ +“区域”条件。

1 个答案:

答案 0 :(得分:1)

Merge数据框:

df1.merge(df2, how='left')

合并将自动在两个数据帧中找到列,并在它们相等的地方进行匹配。 how=left关键字指定您要保留第一个数据帧中的所有行,并查找第二个数据帧中的匹配行。有关更多详细信息,请参见文档。

如果有更多具有相同名称的列,但您只想匹配这两个列,请使用

df1.merge(df2, how='left', on=['Well', 'Zones'])

输出:

#  Well Zones  Inflow  Distance
#0  E18     A    0.45       5.3
#1  E23     B    0.33       2.1
#2  E25     C    0.20       4.8
#3  E18     B    0.20       5.4
#4  E23     A    0.67       2.3
#5  E25     D    0.12       5.5
#6  E23     B    0.20       2.1
#7  E18     A    0.67       5.3
#8  E25     D    0.12       5.5