You can do:
import pandas
df = pandas.DataFrame({"id": [1, 2, 3, 4], "name": ["sam", "sam", "peter", "jack"], "number": [8, 8, 8, 2]})
g = df.groupby(["name", "number"])
print g.groups
which gives:
{('jack', 2): [3], ('peter', 8): [2], ('sam', 8): [0, 1]}
to get number of unique entries per pair you can do:
for p in g.groups:
print p, " has ", len(g.groups[p]), " entries"
which gives:
('peter', 8) has 1 entries
('jack', 2) has 1 entries
('sam', 8) has 2 entries
update:
the OP asked for result in dataframe. One way to get this is to use aggregate with the length function, which will return a dataframe with the number of unique entries per pair:
d = g.aggregate(len)
print d.reset_index().rename(columns={"id": "num_entries"})
gives:
name number num_entries
0 jack 2 1
1 peter 8 1
2 sam 8 2