使用pandas的applymap()函数来使用多个映射函数

7
我使用 df.to_excel() 将 Pandas 数据框的数据输出到 Excel 中。为了提高可读性,我使用 df.style.applymap() 根据内容更改单元格的颜色。
假设我有一个类似下面这样的数据框:
df = 
       Account  Revenue   AccountAge
0     "Boeing"     5000          5.6
1   "Lockheed"   -10000          1.2
2     "Airbus"    12000          0.6
3   "Northrop"    -3000          8.4

账户年龄表示我在账簿上拥有该账户的时间长短。也许我想把负收入单元格标记为红色。我可以这样做:

def color_neg_revenue(val):
    if val < 0:
        color = 'red'
    return "background-color: %s" % color

df = df.style.applymap(color_neg_revenue, subset=["Revenue"])

我可以将此导出为Excel,格式看起来很好!但是假设我还想用黄色标记新账户,当我尝试时:
def color_new_account(val):
    if val < 3:
        color = 'yellow'
    return "background-color: %s" % color

df = df.style.applymap(color_new_account, subset=["AccountAge"])

I get:

AttributeError: 'Styler' object has no attribute 'style'

为什么我不能在已经使用applymap()的数据框上再次使用applymap()?如何解决这个问题?

1
但是你将样式器分配给了 df - Willem Van Onsem
1个回答

14
问题不在函数上。在你的第一次调用中,你执行:
<s><b>df =</b> df.style.applymap(color_neg_revenue, subset=["Revenue"])</s>
现在,df 不再是一个 DataFrame,而是一个 Styler。这样的 Styler 当然不再有 .style 属性。因此,您最好将其赋值给另一个变量,并在该变量上进行链接。例如:
<b>s =</b> df.style.applymap(color_neg_revenue, subset=["Revenue"])

# Look mom, no I have no .style
<b>s</b> = s.applymap(color_new_account, subset=["AccountAge"])

因此,您可以在使用Styler时“链接”这样的applymap调用,但是这样的styler本身没有.style属性。


2
它仍然没有真正地工作 - 不知何故,样式正在相互覆盖。 - avloss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接