Pandas Counting Unique Rows
Since Pandas 1.1.0 the method pandas.DataFrame.value_counts
is available, which does exactly, what you need. It creates a Series with the unique rows as multi-index and the counts as values:
df = pd.DataFrame({'ColA': [1, 1, 1, 1, 1, 2, 3], 'ColB': [1, 1, 1, 2, 2, 1, 2]})
pd.options.display.multi_sparse = False # option to print as requested
print(df.value_counts()) # requires pandas >= 1.1.0
Output, where ColA
and ColB
are the multi-index and the third column contains the counts:
ColA ColB
1 1 3
1 2 2
3 2 1
2 1 1
dtype: int64
You can use size
with reset_index
:
print df.groupby(['ColA','ColB']).size().reset_index(name='Count')
ColA ColB Count
0 1 1 3
1 1 2 2
2 2 1 1
3 3 2 1
I only needed to count the unique rows and have used the DataFrame.drop_duplicates
alternative as below:
len(df[['ColA', 'ColB']].drop_duplicates())
It was twice as fast on my data than len(df.groupby(['ColA', 'ColB']))
.