簡體   English   中英

列中的條件格式單元格基於它在另一列中的對應值

[英]Conditional format cell in column based on it corresponding value in another column

我從數據框中創建了一個excel文件,如下所示:

In [215]: import pandas as pd

In [216]: df = pd.DataFrame({"Name": ["A", "B", "C"], "Status": ['y', 'n', 'yy']})

In [217]: df
Out[217]:
  Name  Status
0    A       y
1    B       n
2    C      yy

如何根據Status的值為“Name”設置bg_color 我嘗試了幾個選項沒有成功:

format1 = workbook.add_format({"bg_color": "#669731"})
format2 = workbook.add_format({"bg_color": "#FFFA22"})
format3 = workbook.add_format({"bg_color": "#A43829"})

選項1

worksheet.conditional_format("A2",
                             {"type": "formula",
                              "criteria": "=ISNUMBER(SEARCH('y', B2))",
                              "format": format1
                             }
)

選項2

worksheet.conditional_format("A2",
                             {"type": "formula",
                              "criteria": "=$B$2='y'",
                              "format": format1
                             }
)

這些都沒有給出預期的結果,當我打開文件時,我收到以下消息的錯誤: .xlsx中的不可讀內容
如果我能以某種方式設置這樣做而不迭代數據幀的值,那將是很好的。

Excel似乎不喜歡字符串上條件格式的單引號。 如果你在里面有雙引號,它可以工作

"criteria": '=($B$2="y")' 

"criteria": "=($B$2='y')"

我在下面給出了一個完整的可重現的示例,其中包含解決方案的屏幕截圖。

import pandas as pd

df = pd.DataFrame({"Name": ["A", "B", "C"], "Status": ['y', 'n', 'yy']})

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')

df.to_excel(writer, sheet_name='Sheet1', index=False)


workbook  = writer.book
worksheet = writer.sheets['Sheet1']

format1 = workbook.add_format({"bg_color": "#669731"})

worksheet.conditional_format("A2",
                             {"type": "formula",
                              "criteria": '=($B$2="y")',
                              "format": format1
                             }
)

workbook.close()

截圖條件格式

如果要為列中的1000個單元格設置此條件格式,則可以使用條件格式的代碼。

worksheet.conditional_format("A2:A1001",
                             {"type": "formula",
                              "criteria": '=(B2:B1001="y")',
                              "format": format1
                             }
)

另一方面,如果你想在一個范圍內設置多個條件,我認為這是可能的唯一方法是使用for循環,用匹配條件的格式寫每個單元格。 我已經提供了下面的示例,它是預期的輸出。 請注意,如果它滿足三個條件中的任何一個條件,它會覆蓋已經放入單元格中的內容,這有點作弊。

import pandas as pd

df = pd.DataFrame({"Name": ["A", "B", "C"], "Status": ['y', 'n', 'yy']}) 
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') 
df.to_excel(writer, sheet_name='Sheet1', index=False) 

workbook  = writer.book 
worksheet = writer.sheets['Sheet1'] 

format1 = workbook.add_format({"bg_color": "#669731"})
format2 = workbook.add_format({"bg_color": "#FFFA22"})
format3 = workbook.add_format({"bg_color": "#A43829"})

for i in range (0, len(df)):
    if df['Status'].ix[i] == "y":
        worksheet.write(i+1, 0, df['Name'].ix[i], format1)
    elif df['Status'].ix[i] == "n":
        worksheet.write(i+1, 0, df['Name'].ix[i], format2)
    elif df['Status'].ix[i] == "yy":
        worksheet.write(i+1, 0, df['Name'].ix[i], format3)


workbook.close()  

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM