Xlsxwriter条件格式循环问题

Xlsxwriter conditional formatting in loop problem

我有 Pandas 带有 multiheader 的枢轴数据框,并且我只在循环中的几列上应用条件格式(例如,6,7,9,10,12,13。 ..) 我已经使用 for Loop 如下:

    for i in range(6,len(df1.columns),3):
            print(i)
            worksheet.conditional_format(4,int(i),len(df1)+3,int(i+1), {'type':     'cell', \
                                            'criteria': '>=', \
                                            'value':'45',\
                                            'format':   format1
                                        })

这使我的 excel 输出损坏,而且如果我修复 Excel,我可以看到我的 header 移动了 1 个单元格。此外,excel 中没有条件格式设置。谁能帮忙解决这个问题? 另外,如果我从代码输出中删除这一行也可以,但没有条件格式。

示例代码如下:

import pandas as pd
th='30000'
cars = {'day':['aug','aug','sep','sep','aug'],
        'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4','Hyundai Elite i20'],
        'Type':['sedan,','sedan','hatchback','hatchback','hatchback'],
        'Down Price': [22000,25000,27000,35000,10000]
        }

df = pd.DataFrame(cars, columns = ['day','Brand', 'Type','Down Price'])
dfpivot=pd.pivot_table(df,index=['day'],columns=['Brand','Type'],values=['Down Price'],aggfunc=np.max)
with pd.ExcelWriter(OUTPATH+'Report.xlsx', engine='xlsxwriter') as writer:

    dfpivot.to_excel(writer,sheet_name = 'data')
    workbook = writer.book
    worksheet = writer.sheets['data']
    format1 = workbook.add_format({'bg_color': '#FFC7CE',
                               'font_color': '#9C0006'})
    for i in range(1,len(dfpivot.columns),1):
            print(i)
            worksheet.conditional_format(4,int(i),len(df1)+3,int(i+1), {'type':     'cell', \
                                            'criteria': '>=', \
                                            'value':th,\
                                            'format':   format1
                                    })
writer.save()

我重新格式化了您的代码并修复了一些小问题:

import pandas as pd
import numpy as np

threshold = '30000'
cars = {'day': ['aug', 'aug', 'sep', 'sep', 'aug'],
        'Brand': ['Honda Civic', 'Toyota Corolla', 'Ford Focus',
                  'Audi A4', 'Hyundai Elite i20'],
        'Type': ['sedan,', 'sedan', 'hatchback', 'hatchback', 'hatchback'],
        'Down Price': [22000, 25000, 27000, 35000, 10000]}

df = pd.DataFrame(cars, columns=['day', 'Brand', 'Type', 'Down Price'])
dfpivot = pd.pivot_table(df, index=['day'],
                         columns=['Brand', 'Type'],
                         values=['Down Price'], aggfunc=np.max)

with pd.ExcelWriter('Report.xlsx', engine='xlsxwriter') as writer:

    dfpivot.to_excel(writer, sheet_name='data')
    workbook = writer.book
    worksheet = writer.sheets['data']
    format1 = workbook.add_format({'bg_color': '#FFC7CE',
                                   'font_color': '#9C0006'})
    max_column = len(cars['Brand'])
    worksheet.set_column(1, max_column, 15)

    for i in range(1, len(dfpivot.columns), 1):
            print(i)
            worksheet.conditional_format(4, i, len(df) + 3, i + 1,
                                         {'type': 'cell',
                                          'criteria': '>=',
                                          'value': threshold,
                                          'format': format1})

它运行并且输出文件具有条件格式:

所以,XlsxWriter 代码有效。但是,范围看起来不正确(它们重叠),因此您应该检查您使用的行号和列号是否正确。

此外,可能没有必要使用单独的条件格式,因为在所有情况下标准都是相同的。在循环外创建一种条件格式可能就足够了。