python - 基于条件的值之间的差异

标签 python dataframe

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

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

我想要的是生成带有区域名称的 df3 以及 df1 和 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 个 df 连接在一起,然后填充那些没有匹配的默认为 0:

df3 = pd.merge(ref_well,df_well, on=['zone'], how='outer').fillna(0)

计算差异并将其放回

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

关于python - 基于条件的值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57254606/

相关文章:

python - 以下片段是什么意思

python - Pandas Dataframe.to_csv - 将变量值插入到 csv 文件的开头

r - 聚合data.table中的多个列

python - 如何使用变量将数据帧传递给函数?

r - 如何从变化的数据帧创建查找表?

python - 将整个函数作为字符串获取/并将字符串转换为函数?

python - 如何根据字符串列表创建解密字典以按字符串加密

python - 如何在列表元素中添加 anchor

python - 用于 bool 索引的 Pandas、loc 与非 loc

python - 如何在 Dask 中进行行处理和项目分配