熊猫在样式中删除行应用功能

Posted

技术标签:

【中文标题】熊猫在样式中删除行应用功能【英文标题】:Pandas drop rows within styles apply function 【发布时间】:2021-06-09 05:41:38 【问题描述】:

我使用 style.apply 函数在打印到 excel 之前突出显示数据框的某些单元格,并希望删除没有突出显示任何单元格的行。

import pandas as pd
import numpy as np

def highlight_difference(x):
    m1 = x['Value_L'] != x['Lim_Low']
    m2 = x['Value_H'] != x['Lim_High']

    df1 = pd.DataFrame('', index=x.index, columns=x.columns)
    df1['Value_L'] = np.where(m1, 'background-color: #E55451', df1['Value_L'])
    df1['Value_H'] = np.where(m2, 'background-color: #E55451', df1['Value_H'])

    drop_mask = m1 | m2
    df1 = df1[drop_mask]

    return df1

df.style.apply(highlight_difference, axis=None).to_excel('Result.xlsx')

这将导致以下错误:

ValueError: 的结果必须与输入具有相同的索引和列

解决这个问题的合理方法是什么?有没有办法在 apply 函数中删除行?

【问题讨论】:

【参考方案1】:

您需要删除之前的值:

m1 = df['Value_L'] != df['Lim_Low']
m2 = df['Value_H'] != df['Lim_High']
drop_mask = m1 | m2

df[drop_mask].style.apply(highlight_difference, axis=None).to_excel('Result.xlsx')

也可以通过这个技巧传递样式的DataFrame:

df = pd.DataFrame('Value_L':[1,2,3],
                   'Lim_Low':[1,2,3],
                   'Value_H':[1,2,2],
                   'Lim_High':[0,2,3])


m1 = df['Value_L'] != df['Lim_Low']
m2 = df['Value_H'] != df['Lim_High']
drop_mask = m1 | m2

df11 = df[drop_mask] 
df1 = pd.DataFrame('', index=df11.index, columns=df11.columns)
df1['Value_L'] = np.where(m1[drop_mask], 'background-color: #E55451', '')
df1['Value_H'] = np.where(m2[drop_mask], 'background-color: #E55451', '')
print (df1)

df11.style.apply(lambda x: df1, axis=None).to_excel('Result.xlsx')

【讨论】:

以上是关于熊猫在样式中删除行应用功能的主要内容,如果未能解决你的问题,请参考以下文章

熊猫:分组并根据条件在每个组中删除行

如何根据上面的行删除行?蟒蛇熊猫

如何在pyspark中使用等效的熊猫轴来删除列而不是行?

熊猫应用功能 - 将每一行与整列进行比较

如何从包含特定列中特定字符串的熊猫数据框中删除行? [复制]

如何根据条件表达式从熊猫数据框中删除行[重复]