Python Pandas如何以每行最大值为基准反转单元格顺序重排行值
实现方法
你需要的按行最大值为基准反转数值顺序的逻辑,本质是对每行有效数值做行内极值对称映射,映射公式为:转换后值 = 行内最大值 + 行内最小值 - 原始值,空值(NaN)会自动保留原有位置,完全匹配你给出的转换规则。
完整代码
import pandas as pd import numpy as np # 构造测试数据集 list_df = {'Order#1' : [5,8,np.nan], 'Order#2' : [4,6,1], 'Order#3' : [2,2,3], 'Order#4' : [1,1,2], 'Order#5' : [3,7,np.nan], 'Order#6' : [np.nan, 5, np.nan], 'Order#7' : [np.nan, 4, np.nan], 'Order#8' : [np.nan, 3, np.nan]} df = pd.DataFrame(data=list_df) # 核心转换逻辑:逐行做对称映射 df_result = df.apply(lambda row: row.max() + row.min() - row, axis=1)
逻辑校验
以你给出的参考转换行(最大值为5、最小值为1,极值和为6)为例,转换结果完全匹配规则:
- 原始值5 → 6-5 = 1
- 原始值4 → 6-4 = 2
- 原始值3 → 6-3 = 3 (中间值保留不变)
- 原始值2 → 6-2 = 4
- 原始值1 → 6-1 = 5
- 所有原始空值位置转换后仍为空,符合预期。
该实现基于pandas原生行运算,无需逐单元格遍历或编写复杂映射表,处理大体积表格时性能表现更好。
内容的提问来源于stack exchange,提问作者Luis Henrique Batista
相关产品推荐
相关产品推荐

