如何替换DataFrame列值且保留原有样式(aEV与aEV_percentile)
解决方案
核心是把样式计算的数据源和最终显示的文本值拆分开:样式依然基于原始aEV_percentile列的数值生成背景渐变,但让该列显示aEV列的内容。
完整代码示例
import matplotlib.colors import pandas as pd # 假设 players_data_df 是你的原始数据DataFrame gradient = matplotlib.colors.LinearSegmentedColormap.from_list("", ['blue', 'white', '#f81707']) # 1. 先按原逻辑设置好所有列的背景样式 data_style = players_data_df.style.format(mapper) \ .background_gradient(subset=['aEV'], cmap=gradient, vmin=players_data_df.aEV.min(), vmax=players_data_df.aEV.max()) \ .background_gradient(subset=['aEV_percentile'], cmap=gradient, vmin=players_data_df.aEV_percentile.min(), vmax=players_data_df.aEV_percentile.max()) # 2. 自定义格式化函数,让aEV_percentile列显示aEV的值 def show_aEV(row): return row['aEV'] # 给aEV_percentile列应用这个格式化规则,只改显示内容,不动样式计算的数据源 data_style = data_style.format(show_aEV, subset=['aEV_percentile'], na_rep='-') # 输出带样式的表格 data_style
为什么之前的方法失效?
直接修改data_style.data['aEV_percentile']会替换Styler内部的数据源,渲染时会基于新的aEV值重新计算背景渐变,自然就丢了原来的百分位样式。而用format方法只是改变单元格显示的文本,不会触动样式计算依赖的原始数据,所以能保留之前设置的背景颜色。
内容的提问来源于stack exchange,提问作者Ivan J.
相关产品推荐
相关产品推荐

