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

function in Pandas.**cut**

```
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()
```