pandas to html 多个0,PANDAS TO_HTML条件格式

我有每天导出到HTML的数据透视表

tCybO.jpg

我用来创建它的代码是

HEADER = '''

.df tbody tr:last-child { background-color: #FF0000; }

'''

FOOTER = '''

'''

with open("/home/testing_libs/htmlex.html", 'w') as f:

f.write(HEADER)

f.write(pivot1.to_html(classes='pivot1'))

f.write(FOOTER)

源是PANDAs数据帧。我想使用PANDA创建逻辑,以使列不出现在数据透视表中,而是确定单位的数据透视单元格的颜色。换句话说,如果我比较前一天的今天的数据透视图,甚至是它的前一个Dataframe(以“单位”为单位),而今天的“数据单元”较小,那么我希望HTML中的CELL为“ RED”而不是黑色。我不知道是否可以将HTML设为红色,而不是基于“单位”值,而是基于相关正/负值来比较同一GROUP的“单位”值。这是创建上面的PIVOT表的数据框

widget region industry units

0 oldschool middle tech 10

1 newschool west manufacturing 40

2 upandcomer east manufacturing 50

3 oldschool west manufacturing 40

4 newschool east manufacturing 30

5 upandcomer middle manufacturing 20

6 oldschool middle manufacturing 10

7 newschool east tech 30

8 upandcomer east tech 30

然后创建PIVOT

pivot1 = pd.pivot_table(frame1,index=['region','widget','industry'])

解决方案

您可以使用np.where(condition, ifConditionTrue, ifConditionFalse)numpy进行更新,pivot1['units']具体取决于与存储前一天单位的另一列(或系列)进行比较,并.map()使用ANSI颜色代码为输出着色,例如:

pivot1['units'] = np.where( (pivot1['units'] < pivot0['units']), (pivot1['units'] = pivot1['units'].map(lambda x: "\x1b[41m"+str(x)+"\x1b[m")), (pivot1['units'].map(lambda x: str(x)))

其中pivot1是当天的数据框,pivot0是前一天的数据框,并且奇怪的前缀和后缀是红色背景上的黑色文本的ANSI颜色代码。

但是,这将使您的“单位”整数值引入字符串,因此无法进行天之间的比较,除非您将其转换回整数–因此,这不是在主数据帧上使用的最佳策略。我建议以另一个名称重新生成它以进行HTML导出。

pivot1_export = pivot1

pivot1_export['units'] = np.where( (pivot1['units'] < pivot0['units']), (pivot1_export['units'] = pivot1['units'].map(lambda x: "\x1b[41m"+str(x)+"\x1b[m")), (pivot1_export['units'].map(lambda x: str(x)))

您可以重复此策略以为更高,不变或特定的值添加更多颜色。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值