from itertools import product import pandas as pd df = pd.DataFrame.from_records(product(range(10), range(10))) df = df.sample(90) df.columns = \"c1 c2\".split() df
I will do
df[~pd.DataFrame(np.sort(df.values,1)).duplicated().values]
From pandas and numpy tri
s=pd.crosstab(df.c1,df.c2) s=s.mask(np.triu(np.ones(s.shape)).astype(np.bool) & s==0).stack().reset_index()