Pandas: Filling missing values by mean in each group

Given a Pandas DataFrame, we have to fill missing values by mean in each group.
Submitted by Pranit Sharma, on July 04, 2022

Pandas is a special tool that allows us to perform complex manipulations of data effectively and efficiently. Inside pandas, we mostly deal with a dataset in the form of DataFrame. DataFrames are 2-dimensional data structures in pandas. DataFrames consist of rows, columns, and data.

The most fascinating key point about pandas is that it contains numerous amounts of function to calculate almost everything mathematically and logically. With the help of pandas, we can calculate the mean of any column in a DataFrame, the column values should be integer or float values and not string.


Mean is nothing but an average value of a series of a number. Mathematically, the mean can be calculated as:

Mean Function

Here, x̄ is the mean, x is the summation of all the values and n is the total number of values/elements.

Suppose we have a series of numbers from 1 to 10, then the average of this series will be:

∑x = 1+2+3+4+5+6+7+8+9+10
∑x = 55
n = 10
x̄ = 55/10
x̄ = 5.5

But in pandas, we use pandas.DataFrame['col'].mean() directly to calculate the average value of a column.

To fill missing values by mean in each group, we will first groupby the same values and then fill the NaN values with their mean.

To work with pandas, we need to import pandas package first, below is the syntax:

import pandas as pd

Let us understand with the help of an example,

Python code to fill missing values by mean in each group

# Importing pandas package
import pandas as pd

# Importing numpy package
import numpy as np

# Creating a dictionary
d = {

# Creating a DataFrame
df = pd.DataFrame(d)

# Display original DataFrame
print("Original DataFrame:\n",df,"\n")

# Filling nan values with mean
df["Marks"] = df.groupby('Name').transform(lambda x: x.fillna(x.mean()))

# Display result
print("Modified Dataframe:\n",df)


Original DataFrame:
     Name  Marks
0    Ram   20.0
1  Shyam    NaN
2  Bablu   18.0
3  Shyam   19.0
4  Bablu   21.0
5    Ram    NaN 

Modified Dataframe:
     Name  Marks
0    Ram   20.0
1  Shyam   19.0
2  Bablu   18.0
3  Shyam   19.0
4  Bablu   21.0
5    Ram   20.0

Python Pandas Programs »


Top MCQs

Comments and Discussions!

© some rights reserved.