@@ -1393,6 +1393,56 @@ def to_html(self, buf=None, columns=None, col_space=None, colSpace=None,
1393
1393
if buf is None :
1394
1394
return formatter .buf .getvalue ()
1395
1395
1396
+ def style (self , rows = None , columns = None , frame = None ):
1397
+ row_styles , col_styles , frame_styles = self ._build_styles (
1398
+ rows = rows , columns = columns , frame = frame
1399
+ )
1400
+ return self .to_html (styles )
1401
+
1402
+ def _format_sytle_args (self , rows = None , columns = None , frame = None ):
1403
+ rows = {row : [x ] if not com .is_list_like (x ) else x
1404
+ for row , x in rows .items ()}
1405
+ columns = {col : [x ] if not com .is_list_like (x ) else x
1406
+ for col , x in columns .items ()}
1407
+ frame = [x ] if not com .is_list_like (x ) else x
1408
+ return rows , columns , frame
1409
+
1410
+
1411
+ def _build_styles (self , rows = None , columns = None , frame = None ):
1412
+ final = [] # (row, col, prop, value)
1413
+
1414
+ rows , columns , frame = self ._format_sytle_args (rows , columns , frame )
1415
+
1416
+ if rows is not None :
1417
+ for row in rows :
1418
+ for func in rows [row ]:
1419
+ props , values = zip (* func (self .loc [row ]))
1420
+ final .append (pd .DataFrame ({'row' : row , 'col' : self .columns ,
1421
+ 'prop' : props , 'value' : values }))
1422
+ if columns is not None :
1423
+ for col in columns :
1424
+ for func in columns [col ]:
1425
+ props , values = zip (* func (self [col ]))
1426
+ final .append (pd .DataFrame ({'row' : self .index , 'col' : col ,
1427
+ 'prop' : props , 'value' : values }))
1428
+
1429
+ if frame is not None :
1430
+ for func in frame :
1431
+ r = func (self )
1432
+ for col in r :
1433
+ try :
1434
+ prop , values = zip (* r [col ])
1435
+ except ValueError :
1436
+ prop , values = '' , ''
1437
+ final .append (pd .DataFrame ({'row' : r .index , 'col' : col ,
1438
+ 'prop' : props , 'value' : values }))
1439
+
1440
+ r = pd .concat (final )[['row' , 'col' , 'prop' , 'value' ]]
1441
+ r = (r ['prop' ] + ':' + r ['value' ]).groupby ([r ['row' ], r ['col' ]]).agg (
1442
+ lambda x : '; ' .join (x ))
1443
+
1444
+ return r .unstack ()
1445
+
1396
1446
@Appender (fmt .docstring_to_string , indents = 1 )
1397
1447
def to_latex (self , buf = None , columns = None , col_space = None , colSpace = None ,
1398
1448
header = True , index = True , na_rep = 'NaN' , formatters = None ,
0 commit comments