如何基于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
相关产品推荐
相关产品推荐

