gpt4 book ai didi

python - 列中的条件格式单元格基于它在另一列中的对应值

转载 作者:太空狗 更新时间:2023-10-30 01:11:53 24 4
gpt4 key购买 nike

我从数据框创建了一个 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()

screenshot conditional formatting

如果您想为列中 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()

enter image description here

关于python - 列中的条件格式单元格基于它在另一列中的对应值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46916442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com