问题描述
设置
我正在依次将两种方法应用于pandas样式器对象,例如
df.style \
.applymap(mapping1,subset=["column_a"]) \
.applymap(mapping2,subset=["column_b"])
不过,我要应用的映射有所不同。例如,我可能意识到我想为列mapping3
添加一个名为column_c
的新映射。为了实现可扩展性,我希望能够快速添加一个映射并应用该映射,而不必在上面的代码段中也添加一行。
我的问题
我想灵活地提供映射并将它们全部应用于df
,其中输入是映射列表(如mappings = [(mapping1,col1),(mapping2,col2),(mapping3,col3)]
,输出是样式化的数据框。
即使这个问题使用了样式化数据框的示例,我也认为这个问题不仅仅限于链接样式化器对象本身。我认为这与熊猫中所有类型的链接方法有关。
可复制的示例
import pandas as pd
df = pd.DataFrame({
"column_a": [-1,-2,3,4],"column_b": ["good","bad","neutral","amazing"],"column_c": [0.1,0.9,0.5,1]
})
def mapping1(val):
if val < 0:
color = "red"
elif val > 0:
color = "green"
else:
color = "black"
return "background-color: %s" % color
def mapping2(val):
if val == "amazing":
color = "purple"
else:
color = "black"
return "color: %s" % color
def mapping3(val):
if val < 0.8:
color = "orange"
if val >= 0.8:
color = "green"
return "color: %s" % color
styler = df.style \
.applymap(mapping1,subset=['column_a']) \
.applymap(mapping2,subset=["column_b"]) \
.applymap(mapping3,subset=["column_c"])
styler