【问题标题】:highlight (color) a panda data frame row by index按索引突出显示(颜色)熊猫数据框行
【发布时间】:2018-10-10 13:20:46
【问题描述】:

我有两个数据框df1:

d1 = {"col1" : ['A', 'B', 'C'],
      "Col2": ["home", "car","banana" ]}

d2 = {"col1" : ['D', 'F','C'],
      "Col2": ["garden", "boat","banana" ]}

df1 = pd.DataFrame(data=d1)
df2 = pd.DataFrame(data=d2)

new_df = pd.merge(df1, df2,  on ='col1', how='outer')
new_df

所以我要做的是突出显示在两个数据框中找到的第三行“香蕉”。 我正在使用Styling documentation 寻找解决方案,但没有运气。 我只能突出显示一行,但是当我有多行时它不起作用。 请伸出援手

【问题讨论】:

    标签: python pandas dataframe conditional-formatting


    【解决方案1】:

    这里有很多关于设置 DataFrame 行样式的问题链接,所以尽管接受的答案对我不起作用,并且没有来自 pandas 的有用错误消息,但我还是一直来这里。我只是来指出,虽然接受的答案可能适用于 html、Jupyter 或他们正在使用的任何东西。当应用于 Excel 时,它不起作用。 对于 Excel,您需要以下内容:

    new_df.style.apply(
        lambda x: ['background-color: <color>' if x.name in [2,4] else '' for i in x],
        axis=1
    )
    

    注意“背景色”的使用。 Excel 不会像您预期的那样呈现“背景”

    此外,在使用 Excel 时,您需要使用 Excel 的可识别颜色列表中的颜色名称,使用“浅绿色”摆弄上述答案可能会给您黑色上的黑色......可能不会任何人都在寻找什么。

    【讨论】:

      【解决方案2】:

      如果你想突出显示两行(比如索引 2 和 4),它几乎是这个 answer 的副本

      new_df.style.apply(lambda x: ['background: lightgreen' if x.name in [2,4] 
                                    else '' for i in x], 
                         axis=1)
      

      如果您希望突出显示列表中包含给定名称的每一行(即lst = ['car', 'boat']),您可以使用

      new_df.style.apply(lambda x: ['background: lightgreen' if (set(lst).intersection(x.values)) 
                                    else '' for i in x], 
                         axis=1)
      

      【讨论】:

      • 谢谢你,它成功了。但是如果我想在数据框中添加另一种颜色,如何保持颜色?
      • @ilatikkral 如果我的回答解决了您的问题,很高兴接受它。如果您还有其他问题,请发送mcve 并打开另一个问题。因此,遇到相同问题的人会更容易找到解决方案。
      • @ilatikkral 如果您想添加更多颜色,您可以在理解列表中使用 if、elif、else 语句。
      猜你喜欢
      • 2020-05-25
      • 2020-11-01
      • 1970-01-01
      • 2021-02-26
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 2022-07-10
      相关资源
      最近更新 更多