For dataframe
In [2]: df = pd.DataFrame({\'Name\': [\'foo\', \'bar\'] * 3, ...: \'Rank\': np.random.randint(0,3,6), ...:
Use GroupBy.ngroup from pandas 0.20.2+:
df["GroupId"] = df.groupby(["Name", "Rank"]).ngroup() print (df) Name Rank Val GroupId 0 foo 2 0.451724 4 1 bar 0 0.944676 0 2 foo 0 0.822390 2 3 bar 2 0.063603 1 4 foo 1 0.938892 3 5 bar 2 0.332454 1