It is accomplishable inside a Jupyter Notebook using HTML formatting, as @Ywapom suggested. Please check his answer as well.
import re
from IPython.display import HTML
def display_highlighted_words(df, keywords):
head = """
<table>
<thead>
""" + \
"".join(["<th> %s </th>" % c for c in df.columns])\
+ """
</thead>
<tbody>"""
for i,r in df.iterrows():
row = "<tr>"
for c in df.columns:
matches = []
for k in keywords:
for match in re.finditer(k, str(r[c])):
matches.append(match)
# reverse sorting
matches = sorted(matches, key = lambda x: x.start(), reverse=True)
# building HTML row
cell = str(r[c])
for match in matches:
cell = cell[:match.start()] +\
"<span style='color:red;'> %s </span>" % cell[match.start():match.end()] +\
cell[match.end():]
row += "<td> %s </td>" % cell
row += "</tr>"
head += row
head += "</tbody></table>"
display(HTML(head))
Then, with tan example DataFrame like this one
df = pd.DataFrame([["Franco color Franco",1],
["Franco Franco Ciccio Franco",2],
["Ciccio span",3]], columns=["A", "B"])
display_highlighted_words(df, ["Franco", "Ciccio"])
the result is the following.

The above code could be easily extended to have the keywords vector to be selected from a column of the dataset, as the original question was asking.