In [12]: df.groupby(["item", "color"])["id"].count().reset_index(name="count") Out[12]: item color count 0 car black 2 1 truck blue 1 2 truck red 2