2016-12-15 1 views
0

은 내가 사용하는 코드는팬더 TO_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) 

소스는 팬더 dataframe입니다 만들 내가

enter image description here

를 HTML로 내보내 매일 피벗 테이블이있다. 피벗 테이블에 나타나지 않지만 유니트의 피벗 셀 색을 결정하는 열을 갖기 위해 PANDA를 사용하여 논리를 만들고 싶습니다. 즉, 오늘의 Pivot 또는 전조의 Dataframe을 전날의 '단위'로 비교하면 현재 날짜의 'units'이 작아집니다. 그런 다음 CELL을 HTML 'RED'로 표시하고 검정색으로 표시하지 않습니다. . 'units'값이 아닌 'GROUP'값을 기반으로하는 HTML 컬러 레드를 가질 수 있는지 여부는 모르겠지만 같은 GROUP의 'units'값을 비교하는 관련된 양/음 값. 다음 THEN

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 만들 수있는 위의 피벗 테이블을 생성하는 dataframe가

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

답변

0

당신은 어디 다른 열 (또는 시리즈)에 대한 비교에 따라 pivot1['units']를 업데이트 NumPy와에서 np.where(condition, ifConditionTrue, ifConditionFalse)을 사용할 수 있습니다 전일의 단위를 저장하고 .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 색상 코드입니다.

그러나 이것은 '단위'정수 값을 소개 문자열로 만들 것이므로 정수로 다시 변환하지 않으면 일을 비교할 수 없으므로 기본 데이터 프레임에서 사용할 가장 좋은 전략은 아닙니다. 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))) 

더 높은 값, 변경되지 않은 값 또는 특정 값에 대해 더 많은 색상을 추가하려면이 전략을 반복하십시오.

+0

감사합니다. 그러나 나는 또한 비교를하기 위해 오늘/어제의 데이터 프레임이 동일한 크기 여야한다는 것을 깨달았습니다. 그래서 그룹화는 하루 차이가 날 것입니다. 예를 들어 어제 East Region에는 'newschool'위젯이 없었을 것입니다. 그래서 현재 Error가 발생합니다 : ValueError : 시리즈 길이가 – PR102012

+0

과 일치해야합니다.이 설정에서는 df 치수를 안정적으로 유지합니다. 비어있는 위젯 행을 0으로 채운다. 새로운 늙은이가 사라집니다. – Zedelghem