我有一个每日数据透视表,我导出为HTML
我用来创建它的代码是
HEADER = '''
<html>
<head>
<style>
.df tbody tr:last-child { background-color: #FF0000; }
</style>
</head>
<body>
'''
FOOTER = '''
</body>
</html>
'''
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创建逻辑,以使列不显示在数据透视表中,但确定单位的数据透视表单元格的颜色。换句话说,如果我比较今天的Pivot,或者甚至是它的前身Dataframe,就前一天的'单位',以及当天的'单位'都比较小,那么我希望那个CELL的HTML'RED'而不是黑色。 我不知道我是否可以根据NOT“单位”值得到HTML红色,但是相关的正/负值比较相同的GROUP的“单位”值。 以下是创建上述PIVOT TABLE
的数据框 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'])
答案 0 :(得分:1)
您可以使用numpy中的np.where(condition, ifConditionTrue, ifConditionFalse)
来更新pivot1['units']
,具体取决于您存储前一天的单位和.map()
的其他列(或系列)的比较输出ANSI colour codes,例如:
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颜色代码背景
然而,这将使您的单位&#39;整数值介绍字符串,因此可以在几天之间进行比较,除非您将它们转换回整数 - 因此这不是在主数据帧上使用的最佳策略。我建议使用不同的名称为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)))
您可以重复此策略,为更高,未更改或特定值添加更多颜色。