python - Python Pandas - 突出显示数据框中的单元格
问题描述
我想测试一列的值是否大于同一数据框的另一个特定值。如果值更大,我想突出显示这个特定的单元格。
我试过这个:
import pandas as pd
b = pd.DataFrame([[5,7,3],[2,3,4],[8,4,7]])
for i in range(0, len(b)):
for j in range(0, len(b.columns)):
if b.iloc[i][j] > b.iloc[2][j]:
b.style.applymap(lambda x: 'background-color : blue' if b.iloc[i][j] > b.iloc[2][j] else '')
b
所以在这个例子中,我想检查 5 或 7 是否大于 3(第 1 列)、2 或 3 是否大于 4(第 2 列)以及 8 或 4 是否大于 7。
它没有任何颜色......我希望有人可以帮助我。提前谢谢。
解决方案
试试这个解决方案:
import pandas as pd
import numpy as np
df = pd.DataFrame([[5,7,8],[2,3,4],[8,4,9]])
def highlight(s):
'''
highlight the maximum in a Series.
'''
is_max = s >= s[2]
return ['background-color: blue' if v else '' for v in is_max]
df.style.apply(highlight, axis=0)
请注意,该解决方案基于我们讨论的线程。主要变化是高亮函数内部的条件。Usingapplymap
每次都在单个单元格上工作,并且无法访问其在数据框中的位置。Usingapply
每次都在一行上工作,并且可以与同一行和不同列中的单元格进行比较。