如何定位两DataFrame相减为负的坐标并替换原df对应值为0
操作方法
你写的find_negative函数已经能正确返回所有负值对应的(行索引, 列名)坐标,只需要遍历返回的坐标列表,逐位置给原df赋值为0即可,完整可运行代码如下:
import pandas as pd # 原始数据 df = pd.DataFrame([[1, 5, 1], [2, 6, 2], [3, 7, 3], [4, 8, 4]]) df2 = pd.DataFrame([[1, 5, 10], [3, 6, 2], [1, 9, 3], [4, 8, 4]]) # 计算差值 df_sub = df - df2 # 查找负值坐标的自定义函数 def find_negative(df): coordinates = [] for column in df.columns: for index in df.index: if df.loc[index, column] < 0: coordinates.append((index, column)) return coordinates # 获取所有负值坐标 neg_positions = find_negative(df_sub) # 遍历坐标完成值替换 for row_idx, col_name in neg_positions: df.loc[row_idx, col_name] = 0
执行后打印df,就能得到你预期的结果:
0 1 2 0 1 5 0 1 0 6 2 2 3 0 3 3 4 8 4
更高效的简化写法
如果不想写双层循环遍历,可以直接用pandas内置的mask方法一步完成替换,不需要自定义坐标查找函数,运行效率更高:
# 差值小于0的位置替换为0,其余位置保留原值 df = df.mask(df - df2 < 0, 0)
运行结果和上面的写法完全一致。
内容的提问来源于stack exchange,提问作者EVS_93
相关产品推荐
相关产品推荐

