Home > other >  How to replace the values of a column to other columns only in NaN values?
How to replace the values of a column to other columns only in NaN values?

Time:01-15

How to fill the values of column ["state"] with another column ["country"] only in NaN values?

Like in this Pandas DataFrame:

         state   country  sum
0          NaN     China    1
1        Assam     India    2
2        Odisa     India    3
3        Bihar     India    4
4          NaN     India    5
5          NaN  Srilanka    6
6          NaN   Malaysia   7
7          NaN    Bhutan    8
8   California        US    9
9        Texas        US   10
10     Newyork        US   11
11         NaN        US   12
12         NaN    Canada   13

What code should I do to fill state columns with country column only in NaN values, like this:

         state   country  sum
0        China     China    1
1        Assam     India    2
2        Odisa     India    3
3        Bihar     India    4
4        India     India    5
5     Srilanka  Srilanka    6
6     Malaysia  Malaysia    7
7       Bhutan    Bhutan    8
8   California        US    9
9        Texas        US   10
10     Newyork        US   11
11          US        US   12
12      Canada    Canada   13

I can use this code:

df.loc[df['state'].isnull(), 'state'] = df[df['state'].isnull()]['country'].replace(df['country'])

But in a very large dataset with 300K of rows, it compute for 5-6 minutes and crashed every time. Because it is replacing one value at a time. Like this Can anyone help me with efficient code for this? Please!

CodePudding user response:

Perhaps using fillna without checking for isnull() and replace():

df['state'].fillna(df['country'], inplace=True)
print(df)

Output

         state   country  sum
0        China     China    1
1        Assam     India    2
2        Odisa     India    3
3        Bihar     India    4
4        India     India    5
5     Srilanka  Srilanka    6
6     Malaysia  Malaysia    7
7       Bhutan    Bhutan    8
8   California        US    9
9        Texas        US   10
10     Newyork        US   11
11          US        US   12
12      Canada    Canada   13
  •  Tags:  
  • Related