Pandas 如何使用XLSXWriter中的conditional_format()函数根据多个条件高亮显示单个单元格?

Pandas 如何使用XLSXWriter中的conditional_format()函数根据多个条件高亮显示单个单元格?,pandas,conditional-formatting,xlsxwriter,gs-conditional-formatting,Pandas,Conditional Formatting,Xlsxwriter,Gs Conditional Formatting,我正在尝试编写一个代码,将excel工作表作为输入,并将输出写入新的excel工作表。输入是相同的文件,没有突出显示。 需要考虑的条件 1.如果大于80,则用黄色突出显示“标记”列中的单元格 2.以下3个是案例2的假设: 2.1. 对于列Div_No“B”和列名称“v”,如果标记值==CGPA值,则用黄色突出显示CGPA 2.2. 对于列Div_No'B'和列名称'v',如果标记值>CGPA值,则用绿色突出显示CGPA 2.3. 对于列Div_No'B'和列名称'v',如果标记值df.iloc[

我正在尝试编写一个代码,将excel工作表作为输入,并将输出写入新的excel工作表。输入是相同的文件,没有突出显示。 需要考虑的条件 1.如果大于80,则用黄色突出显示“标记”列中的单元格 2.以下3个是案例2的假设: 2.1. 对于列Div_No“B”和列名称“v”,如果标记值==CGPA值,则用黄色突出显示CGPA 2.2. 对于列Div_No'B'和列名称'v',如果标记值>CGPA值,则用绿色突出显示CGPA
2.3. 对于列Div_No'B'和列名称'v',如果标记值,我认为Excel内置的条件格式不可能实现这一点。但是,可以使用pandas和for循环。我不知道这是否对您有帮助,因为“CGPA”列上的格式不会跟随您在创建文件后所做的任何更改,但至少您可以在创建文件时对其进行格式化。我会这样做:

import pandas as pd

# Create your dataframe
df = pd.DataFrame({'Div_No': ['A','A','A','A','B','B','B','C','C'],
                   'Roll_no': [x for x in range(1,10)],
                   'name': ['a','b','g','s','v','v','v','v','k'],
                   'marks': [54,60,54,67,43,88,54,91,66],
                   'CGPA': [54,61,53,66,46,88,51,90,65]})

# Capture the index number where it fulfils your criteria
# 1st column must equal to B, 3rd column must equal to v
rows_that_fulfil_criteria = df.index[(df['Div_No']=='B') & (df['name']=='v')]

# Kickstart the xlsxwriter
writer = pd.ExcelWriter("test.xlsx", engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

# Define the formats for the conditional formating
cell_format_red = workbook.add_format({'bg_color': 'red'})
cell_format_yellow = workbook.add_format({'bg_color': 'yellow'})
cell_format_green = workbook.add_format({'bg_color': 'green'})

# Conditional formatting for column marks is easy, just use the built in
worksheet.conditional_format('D2:D1048576', {'type': 'cell', 'criteria': '>',
                              'value': 80, 'format': cell_format_yellow})

# Conditional formatting for column CGPA
# If it matches the index number that we captured earlier then
# compare the values between columns marks and CGPA
for row in rows_that_fulfil_criteria:
    if df.iloc[row,3] == df.iloc[row,4]:
        worksheet.write(row+1, 4, df.iloc[row,4], cell_format_yellow)
    elif df.iloc[row,3] > df.iloc[row,4]:
        worksheet.write(row+1, 4, df.iloc[row,4], cell_format_green)
    elif df.iloc[row,3] < df.iloc[row,4]:
        worksheet.write(row+1, 4, df.iloc[row,4], cell_format_red)

writer.save()
将熊猫作为pd导入
#创建您的数据帧
df=pd.DataFrame({'Div_No':['A','A','A','A','B','B','B','C','C'],
“滚动编号”:[x代表范围(1,10)内的x],
'名称':['a'、'b'、'g'、's'、'v'、'v'、'v'、'v'、'k'],
“标记”:[54,60,54,67,43,88,54,91,66],
‘CGPA’:[54,61,53,66,46,88,51,90,65]})
#捕获符合条件的索引号
#第一列必须等于B,第三列必须等于v
符合条件的行=df.index[(df['Div\u No']=='B')和(df['name']=='v')]
#启动xlsxwriter
writer=pd.ExcelWriter(“test.xlsx”,engine='xlsxwriter')
df.to_excel(编写器,工作表名称='Sheet1',索引=False)
工作簿=writer.book
工作表=书写器.工作表['Sheet1']
#定义条件格式化的格式
单元格\u格式\u红色=工作簿。添加\u格式({'bg\u color':'red'})
单元格\格式\黄色=工作簿。添加\格式({'bg\ u color':'yellow'})
单元格\格式\绿色=工作簿。添加\格式({'bg\ u color':'green'})
#列标记的条件格式很简单,只需使用内置的
工作表.conditional_格式('D2:D1048576',{'type':'cell','criteria':'>',
“值”:80,“格式”:单元格\格式\黄色})
#列CGPA的条件格式
#如果它与我们之前捕获的索引号匹配
#比较列标记和CGPA之间的值
对于符合标准的行中的行:
如果df.iloc[row,3]==df.iloc[row,4]:
工作表.write(第1行,第4行,df.iloc[第4行],单元格格式为黄色)
elif df.iloc[row,3]>df.iloc[row,4]:
工作表.write(行+1,4,df.iloc[行,4],单元格格式\绿色)
elif df.iloc[row,3]
谢谢Dimitris Thomas。提供的解决方案。