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

如何基于rank表按列替换pandas dataframe中的对应数值

Pandas 高效按列条件替换实现方案

全程使用pandas/numpy向量化操作,无Python层循环,性能远高于迭代写法,符合Python风格。

完整代码示例

导入依赖

import pandas as pd

构造测试数据(如果已经有数据可跳过该段)

# 构造Rank表
rank_df = pd.DataFrame({
    'A': [85, 22, 80],
    'B': [88, 34, 80],
    'C': [44, 80, 2],
    'D': [80, 92, 31]
})
# 构造Value表
value_df = pd.DataFrame({
    'a': [0.671399, 0.446172, 0.614758],
    'b': [0.101208, -0.243316, 0.075793],
    'c': [-0.181532, 0.051767, -0.451460],
    'd': [0.241273, 1.577318, -0.012493]
})

核心逻辑

方案1:按列顺序对齐(适合列顺序严格对应场景)

# 提取每列Rank=80对应的Value值
col_replace_val = value_df[rank_df.eq(80).values].stack().values
# 批量替换Rank>80位置的数值
result = value_df.mask(rank_df.gt(80).values, col_replace_val, axis=1)

方案2:按列名对齐(更稳妥,避免列顺序错乱)

# 对齐Rank表列名与Value表一致(此处为转小写)
rank_df.columns = rank_df.columns.str.lower()
# 提取每列替换值
col_replace_val = value_df[rank_df.eq(80)].stack().droplevel(0)
# 批量替换
result = value_df.mask(rank_df.gt(80), col_replace_val, axis=1)

运行结果示例

a         b         c         d
0  0.614758  0.075793 -0.181532  0.241273
1  0.446172 -0.243316  0.051767  0.241273
2  0.614758  0.075793 -0.451460 -0.012493

内容的提问来源于stack exchange,提问作者cyrilmuay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:48:03