You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定位两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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:24:32