Archit
Archit

Reputation: 588

Replacing NAN value in a pandas dataframe from values in other records of same group

I have a dataframe df

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [np.nan, 1, 2,np.nan,2,np.nan,np.nan], 
               'B': [10, np.nan, np.nan,5,np.nan,np.nan,7], 
               'C': [1,1,2,2,3,3,3]})

which looks like :

     A     B  C
0  NaN  10.0  1
1  1.0   NaN  1
2  2.0   NaN  2
3  NaN   5.0  2
4  2.0   NaN  3
5  NaN   NaN  3
6  NaN   7.0  3

I want to replace all the NAN values in column A and B with the value from other records which are from the same group as mentioned in column C.

My expected output is :

     A     B   C
0  1.0   10.0  1
1  1.0   10.0  1
2  2.0    5.0  2
3  2.0    5.0  2
4  2.0    7.0  3
5  2.0    7.0  3
6  2.0    7.0  3

How can I do the same in pandas dataframe ?

Upvotes: 4

Views: 42

Answers (1)

jezrael
jezrael

Reputation: 863531

Use GroupBy.apply with forward and back filling missing values:

df[['A','B']] = df.groupby('C')['A','B'].apply(lambda x: x.ffill().bfill())
print (df)

     A     B  C
0  1.0  10.0  1
1  1.0  10.0  1
2  2.0   5.0  2
3  2.0   5.0  2
4  2.0   7.0  3
5  2.0   7.0  3
6  2.0   7.0  3

Upvotes: 3

Related Questions