Python 熊猫数据帧样式-如何单独(而不是整体)对每一行进行颜色映射
我有这样一个数据框(Python 熊猫数据帧样式-如何单独(而不是整体)对每一行进行颜色映射,python,pandas,jupyter-notebook,pandas-styles,Python,Pandas,Jupyter Notebook,Pandas Styles,我有这样一个数据框(df),使用颜色映射进行样式设置: #create random 30 x 30 frame df = pd.DataFrame(np.random.randint(0, 100, (5, 20))) df.style.background_gradient(cmap='RdYlGn_r') 上面的代码在所有数字(5 x 20单元格-较小的数字为绿色,较大的数字为红色)上为数据帧着色 对于单独考虑的每一行(不是作为一个5 x 20单元格的整体组),即对于单独考虑的第0行
df
),使用颜色映射进行样式设置:
#create random 30 x 30 frame
df = pd.DataFrame(np.random.randint(0, 100, (5, 20)))
df.style.background_gradient(cmap='RdYlGn_r')
上面的代码在所有数字(5 x 20单元格-较小的数字为绿色,较大的数字为红色)上为数据帧着色
对于单独考虑的每一行(不是作为一个5 x 20单元格的整体组),即对于单独考虑的第0行到第4行,如何将小单元格着色为大单元格(即1行x 20列)
===
示例上述df
的以下两个示例使用apply按行和列分别突出显示中间值。我如何为每一行上色,如上面小到大的数字示例所示
def highlight_max(s):
'''
highlight the maximum in a Series yellow.
'''
is_max = s == s.max()
return ['background-color: yellow' if v else '' for v in is_max]
display(
HTML("""<p style="background-color:lightblue;color:black;font-weight: bold">
each row - median highlight
</p>""")
)
display(df.head(5).style.apply(highlight_max, axis=1))
display(
HTML("""<p style="background-color:lightblue;color:black;font-weight: bold">
each col - median highlight
</p>""")
)
display(df.head(5).style.apply(highlight_max, axis=0))
def高亮显示最大值:
'''
以黄色系列突出显示最大值。
'''
is_max=s==s.max()
return['background-color:yellow'if v else''表示v in is_max]
展示(
HTML(“”
每行-中间带高光
“”)
)
显示(df.head(5.style.apply)(高亮显示最大值,轴=1))
展示(
HTML(“”
每列-中间突出显示
“”)
)
显示(df.head(5.style.apply)(高亮显示最大值,轴=0))
默认情况下,应用背景渐变时,将分别考虑每一列 通过比较第0列和第4列中的“74”,可以在顶部图像中验证这一点 要单独处理每一行,请使用
df.style.background\u gradient(cmap='RdYlGn\u r',axis=1)
其他信息:
请参阅下面的代码,以生成以下显示,使背景颜色很好
- 整个数据帧(轴=无)
- 查看每一列(轴=0)[默认值]
- 查看每一行(轴=1)
将熊猫作为pd导入
从io导入StringIO
从IPython.display导入显示
从IPython.display导入清除输出
从IPython.display导入HTML
dfstr=StringIO(u“”
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
85 83 90 78 70 70 65 79 49 28 14 11 4 52 90 19 78 7 10 50
10 10 10 5 0 4 6 5 5 5 4 2 2 2 2 2 2 2 2 2
16 33 81 81 47 68 20 75 92 65 39 26 53 82 1000 57 4 53 45 18
10 10 10 5 0 4 6 5 30 30 30 2 2 2 2 2 2 2 2 2
100 299 399 50 50 50 50 50 50 50 300 200 201 300 200 300 204 200 305 300
""")
df=pd.read\u csv(dfstr,sep=“\t”)
#df=pd.DataFrame(np.random.normal(random.choice([1001000]),random.choice([10100]),size=(5,12)))
#df
展示(
HTML(“”
整个数据帧(轴=无)-查看整个数据帧
“”)
)
显示(df.style.background\u渐变(cmap='RdYlGn\u r',axis=None))
展示(
HTML(“”
每列(轴=0)。所有行。这是默认值。
“”)
)
显示(df.style.background_gradient(cmap='RdYlGn_r',axis=0))#默认值
展示(
HTML(“”
每行(轴=1)。所有列。
“”)
)
显示(df.style.background\u渐变(cmap='RdYlGn\u r',轴=1))
import pandas as pd
from io import StringIO
from IPython.display import display
from IPython.display import clear_output
from IPython.display import HTML
dfstr = StringIO(u"""
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
85 83 90 78 70 70 65 79 49 28 14 11 4 52 90 19 78 7 10 50
10 10 10 5 0 4 6 5 5 5 4 2 2 2 2 2 2 2 2 2
16 33 81 81 47 68 20 75 92 65 39 26 53 82 1000 57 4 53 45 18
10 10 10 5 0 4 6 5 30 30 30 2 2 2 2 2 2 2 2 2
100 299 399 50 50 50 50 50 50 50 300 200 201 300 200 300 204 200 305 300
""")
df = pd.read_csv(dfstr, sep="\t")
# df = pd.DataFrame(np.random.normal(random.choice([100, 1000]), random.choice([10, 100]), size=(5, 12)))
# df
display(
HTML("""<br /><p style="background-color:lightblue;color:black;font-weight: bold">
whole dataframe (axis=None) - look at whole data frame
</p>""")
)
display(df.style.background_gradient(cmap='RdYlGn_r', axis=None))
display(
HTML("""<br /><p style="background-color:lightblue;color:black;font-weight: bold">
each column (axis=0). all rows. This is the Default.<br />
</p>""")
)
display(df.style.background_gradient(cmap='RdYlGn_r', axis=0)) #default
display(
HTML("""<br /><p style="background-color:lightblue;color:black;font-weight: bold">
each row (axis=1). all columns. <br />
</p>""")
)
display(df.style.background_gradient(cmap='RdYlGn_r', axis=1))