For Data analysis, continuous data is often discretized or separated into “bins”.Suppose you have a list of people and their ages and you want to group them into discrete age buckets.

```data = [['Alex',10],['Bob',16],['Clarke',26],['James',24],['John',69]]
```

Let’s divide these into bins of 0 to 14, 15 to 24, 25 to 64, and finally 65 to 100. To do so, you have to use `cut` function in Pandas.

```df['binned']=pd.cut(x=df['age'], bins=[0,14,24,64,100])
```

It contains a categories array specifying the distinct category names along with labeling for the `ages` data in the codes attribute.

The parenthesis means that the side is open, while the square bracket means it is closed. You can change which side is closed by passing `right=False`.

You can also pass your own bin names by passing a list or array to the labels option.

```category = ['Child', 'Young', 'Adults', 'Senior']

df['category']=pd.cut(x=df['age'], bins=[0,14,24,64,100],labels=category)
```

If you pass an integer number of bins to cut instead of explicit bin edges, it will compute equal-length bins based on the minimum and maximum values in the data. Consider the case of some uniformly distributed data chopped into three.

```data = [0,10,20,30,40,50,60,70,80,90,100]
pd.cut(data, 4,precision=0)
```

## Count Bins

Note that `pd.value_counts(bins)` are the bin counts for the result of `pandas.cut` .

```pd.value_counts(df['binned'])
#df.groupby(df['category']).size()
```