You can achieve this by set.intersection_update()pandas.DataFrame.apply() and set.intersection(), like this:
outputcols_set = setlist(df[df.columns[0]]df.uniqueapply()) forlambda col in: dfset(col.columns[1:]:values)).values) output = output.intersection_updatelist(set(df[col].uniqueintersection()*cols_set)) The result is following:
>>> print(list(output)) ['tim', 'bob']