Home > Software engineering >  Pandas Sort 2 columns with NaN condition
Pandas Sort 2 columns with NaN condition

Time:05-05

I want to create a new data frame with sort Rank cur., while Rank prev. equal NaN
The point is to get All Current Rank where it didn't have Previous rank, while sorting current rank

Dataframe as following:

Searchterm Rank cur. Rank prev. Change Volume
Word1 5 29 ↑ -28 20
Word2 3 NaN ↑ -5 500
Word3 2 9 ↑ -6 35
Word4 4 NaN ↑ -4 40
Word5 1 NaN ↑ -6 210

My approach: Where dfMerged is the original df
*Note that the code works, but it get Volume value set to NaN (I would like to keep it-"at same or at extra step")

dfTopNewcomer = dfMerged[dfMerged['Rank prev.'].isnull()]
dfTopNewcomer = dfTopNewcomer.drop(['Rank prev.'], 1)
dfTopNewcomer = dfTopNewcomer.sort_values(by=['Rank cur.'], ascending=True)
dfTopNewcomer

The output i need should be:

Searchterm  Rank cur.   Rank prev.  Change      Volume
Word5           1           NaN         ↑ -6        210
Word3           2           NaN         ↑ -6        35
Word1           5           NaN         ↑ -28       20

CodePudding user response:

   df = dfMerged[dfMerged['Rank prev.'].isnull()].sort_values(by=['Rank cur.'])

Is this what you are looking for?

CodePudding user response:

The only way I can figure to get your desired output is by shifting the Rank prev. column...

dfTopNewcomer = dfMerged[dfMerged['Rank prev.'].shift(1).isnull()]
dfTopNewcomer = dfTopNewcomer.drop(['Rank prev.'], axis=1)
dfTopNewcomer = dfTopNewcomer.sort_values(by=['Rank cur.'], ascending=True)
print(dfTopNewcomer)

Output:

  Searchterm  Rank cur. Change  Volume
4      Word5          1   ↑ -6     210
2      Word3          2   ↑ -6      35
0      Word1          5  ↑ -28      20
  • Related