基于条件的值之间的差异

时间:2019-07-29 13:10:16

标签: python dataframe

我有两个数据框,我想根据条件找到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

但是,如果我打印出结果,它可以完美地计算出

1 个答案:

答案 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