# Source code for featuretools.primitives.standard.aggregation.n_most_common

```import numpy as np
from woodwork.column_schema import ColumnSchema

from featuretools.primitives.base.aggregation_primitive_base import AggregationPrimitive
from featuretools.utils.gen_utils import Library

[docs]class NMostCommon(AggregationPrimitive):
"""Determines the `n` most common elements.

Description:
Given a list of values, return the `n` values
which appear the most frequently. If there are
fewer than `n` unique values, the output will be
filled with `NaN`.

Args:
n (int): defines "n" in "n most common." Defaults
to 3.

Examples:
>>> n_most_common = NMostCommon(n=2)
>>> x = ['orange', 'apple', 'orange', 'apple', 'orange', 'grapefruit']
>>> n_most_common(x).tolist()
['orange', 'apple']
"""

name = "n_most_common"
input_types = [ColumnSchema(semantic_tags={"category"})]
return_type = None

[docs]    def __init__(self, n=3):
self.n = n
self.number_output_features = n
self.description_template = [
"the {} most common values of {{}}".format(n),
"the most common value of {}",
*["the {nth_slice} most common value of {}"] * (n - 1),
]

def get_function(self, agg_type=Library.PANDAS):
def n_most_common(x):
# Counts of 0 remain in value_counts output if dtype is category
# so we need to remove them
counts = x.value_counts()
counts = counts[counts > 0]
array = np.array(counts.index[: self.n])
if len(array) < self.n:
filler = np.full(self.n - len(array), np.nan)
array = np.append(array, filler)
return array

return n_most_common
```