body {
margin: 0;
font-family: Helvetica;
}
table.dataframe {
border-collapse: collapse;
border: none;
}
table.dataframe tr {
border: none;
}
table.dataframe td, table.dataframe th {
margin: 0;
border: 1px solid white;
padding-left: 0.25em;
padding-right: 0.25em;
}
table.dataframe th:not(:empty) {
background-color: #fec;
text-align: left;
font-weight: normal;
}
table.dataframe tr:nth-child(2) th:empty {
border-left: none;
border-right: 1px dashed #888;
}
table.dataframe td {
border: 2px solid #ccf;
background-color: #f4f4ff;
}
h3 {
color: white;
background-color: black;
padding: 0.5em;
}
/* Add to ~/.ipython/profile_default/static/custom/custom.css */
/* Pretty Pandas Dataframes */
.dataframe * {border-color: #c0c0c0 !important;}
.dataframe th{background: #eee;}
.dataframe td{text-align: right; min-width:5em;}
/* Format summary rows */
.dataframe-summary-row tr:last-child,
.dataframe-summary-col td:last-child{
background: #eee;
font-weight: 500;
}
from numbers import Number
def as_percent(v, precision='0.2'):
"""Convert number to percentage string."""
if isinstance(v, Number):
return "{{:{}%}}".format(precision).format(v)
else:
raise TypeError("Numeric type required")
import numpy as np
import pandas as pd
from functools import partial
def summary(df, fn=np.sum, axis=0, name='Total',
table_class_prefix='dataframe-summary'):
"""Append a summary row or column to DataFrame.
Input:
------
df : Dataframe to be summarized
fn : Summary function applied over each column
axis : Axis to summarize on (1: by row, 0: by column)
name : Index or column label for summary
table_class_prefix : Custom css class for dataframe
Returns:
--------
Dataframe with applied summary.
"""
total = df.apply(fn, axis=axis).to_frame(name)
table_class = ""
if axis == 0:
total = total.T
table_class = "{}-row".format(table_class_prefix)
elif axis == 1:
table_class = "{}-col".format(tbale_class_prefix)
out = pd.concat([df, total], axis=axis)
# Patch to_html function to use custom css class
out.to_html = partial(out.to_html, classes=table_class)
return out