我有两个数据框,我想根据条件找到dataframe1和dataframe2之间的差异。我的意思是:
df.ref_well:
zone depth
a 34
b 23
c 11
d 35
e -9999
df_well
zone depth
a 17
c 15
d 25
f 11
我想要的是生成具有区域名称以及df1和df3中相同区域深度之间的差异的df3:
df3 =井参考井(相同区域)
zone depth
a 17
b -9999
c -4
d 10
e -9999
我尝试分别遍历dfs并标识相同的区域,如果它们相等则可以找到区别:
ref_well_zone_count=len(df_ref_well.iloc[:,0])
well_zone_count=len(df_well.iloc[:,0])
delta_depth=[]
for ref_zone in range(ref_well_zone_count):
for well_zone in range(well_zone_count):
if df_ref_well.iloc[ref_zone,0]==df_well.iloc[well_zone,0]:
delta_tvdss.append(df_well.iloc[well_zone, 1] - df_ref_well.iloc[ref_zone, 1])
问题是我无法将结果填充到新列中,所以我无法插入它们,因此当我尝试将delta_depth添加为列时会说:
ValueError: Length of values does not match length of index
但是,如果我打印出结果,它可以完美地计算出
答案 0 :(得分:2)
如果没有匹配项,则没有指定要执行的操作。所以我假设没有匹配意味着深度= 0
使用合并将2个df链接在一起,然后填充不匹配的内容,默认情况下为0:
df3 = pd.merge(ref_well,df_well, on=['zone'], how='outer').fillna(0)
计算差异并将其退回
df3['diff'] = df3.depth_x - df3.depth_y