Python 基于条件的值之间的差异

Python 基于条件的值之间的差异,python,dataframe,Python,Dataframe,我有两个数据帧,我想根据条件找出dataframe1和dataframe2之间的差异。我的意思是: df.ref_井: zone depth a 34 b 23 c 11 d 35 e -9999 DFU井 zone depth a 17 c 15 d 25 f 11 我想要的是生成带有区域名称的df3,以及df1和df3中相同区域的深度差: df3=井-参考井(相同区域) 我尝试分别遍历dfs并确定相同的区域,如果它们相等,则查找差异:

我有两个数据帧,我想根据条件找出dataframe1和dataframe2之间的差异。我的意思是:

df.ref_井:

zone depth
a    34
b    23
c    11
d    35
e    -9999
DFU井

zone depth
a    17
c    15
d    25
f    11
我想要的是生成带有区域名称的df3,以及df1和df3中相同区域的深度差:

df3=井-参考井(相同区域)

我尝试分别遍历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个df链接在一起,然后填充那些不匹配的df,默认情况下将为0:

df3 = pd.merge(ref_well,df_well, on=['zone'], how='outer').fillna(0)
计算差额并将其放回原处

df3['diff'] = df3.depth_x - df3.depth_y
df3['diff'] = df3.depth_x - df3.depth_y