我在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个或更多条件(因为取决于区域和距离的不同),因此,不仅“好”而且“好” “ +“区域”条件。
答案 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