Skip to content Skip to sidebar Skip to footer

How To Re Order A Pandas Dataframe Based On A Dictionary Condition

I have a df like this, case step deep value 0 case 1 1 ram in India ram,cricket 1 NaN 2 ram plays cricket

Solution 1:

You can create MultiIndex for sorting, only is necessary values from column value are in my_dict:

my_dict = {'ram':1,'cricket':1,'ravi':2.5,'sri':1}

#create DataFrame from value column, replace and sum columns
a = df['value'].str.split(',', expand=True).replace(my_dict).sum(axis=1)
#create groups
b = df['step'].diff().le(0).cumsum()
#create Series by summing per groups
c = a.groupby(b).transform('sum')
#create MultiIndex
df.index = [c,b]
print (df)
            case  step                  deep        value
    step                                                 
2.0 0     case 1     1          ram in India  ram,cricket
    0        NaN     2     ram plays cricket          NaN
2.5 1     case 2     1  ravi played football         ravi
    1        NaN     2      ravi works welll          NaN
1.0 2     case 3     1      Sri bought a car          sri
    2        NaN     2          sri went out          NaN

#sorting MultiIndex and removing
df = df.sort_index(ascending=False).reset_index(drop=True)
print (df)
     case  step                  deep        value
0  case 2     1  ravi played football         ravi
1     NaN     2      ravi works welll          NaN
2  case 1     1          ram in India  ram,cricket
3     NaN     2     ram plays cricket          NaN
4  case 3     1      Sri bought a car          sri
5     NaN     2          sri went out          NaN

Post a Comment for "How To Re Order A Pandas Dataframe Based On A Dictionary Condition"