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