看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本需求是将一个源数据,设定各种样式,包括按一定条件加相应颜色的背景,对一定条件的单元格字体加颜色,对特定单元格字体加粗等等,这里用到了 Pandas 样式的函数应用方法,通过 style 的 applymap 可以灵活地对全表中的数据进行样式设定。
数据集(原为 excel):
'''
grade 商品 11月1日 11月2日 11月3日
NA AB demand 1136 2556 2841
Z BB 海运 2272 1000 120
ZA CA 空运 120 496 661
N BC demand -78 520 1122
Z BB demand 2369 -99 374
N ND 海运 501 498 1098
'''
需求为导出 Excel 有如下样式:
具体需求为:
需求来源于知乎。
import pandas as pd
# 使用剪贴板读取数据
df = pd.read_clipboard()
df = df.reset_index()
df.columns = list('abcdef')
# 筛选条件1:满足指定条件并且应用在某个列上
sst1 = pd.IndexSlice[df.loc[(df.c=='demand') & (df.f>500)].index, 'f']
# 方法 1
sfun1 = lambda x: 'background-color: yellow' if x > 500 else ''
# 方法 2
sfun2 = lambda x: np.where(x.c=='demand' and x.f>500, '警告' ,'')
(
df.assign(g=(df.where((df.c=='demand') & (df.f>500)) == df).f.map({True:'警告'}))
# 添加 g 列方法 2
# .assign(g=df.apply(sfun2, axis=1))
.style
.applymap(sfun1, subset=sst1)
.applymap(lambda x: 'background-color: red;' if x=='警告' else '', subset=['g'])
.applymap(lambda x: 'color: red' if x<0 else '', subset=list('def'))
.applymap(lambda x: 'color: green; font-weight: bold;' if 'a' in str(x).lower() else '',
subset=list('abc'))
# .to_excel('gairuo.com.xlsx', engine='openpyxl') # 导出 Excel
)
解开最后一行注释可导出设定样式的 Excel 文件。
更新时间:2024-08-18 15:39:54 标签:pandas python 样式 可视化