Funciones de ventana tipo SQL en PANDAS: Numeración de filas en el marco de datos de Python Pandas

Vengo de un fondo de sql y uso el siguiente paso de procesamiento de datos con frecuencia:

Partición de la tabla de datos por uno o más camposPara cada partición, agregue un número a cada una de sus filas que clasifique la fila por uno o más campos, donde el analista especifica ascendente o descendente

EX:

df = pd.DataFrame({'key1' : ['a','a','a','b','a'],
           'data1' : [1,2,2,3,3],
           'data2' : [1,10,2,3,30]})
df
     data1        data2     key1    
0    1            1         a           
1    2            10        a        
2    2            2         a       
3    3            3         b       
4    3            30        a        

Estoy buscando cómo hacer el equivalente de PANDAS a esta función de ventana de sql:

RN = ROW_NUMBER() OVER (PARTITION BY Key1, Key2 ORDER BY Data1 ASC, Data2 DESC)


    data1        data2     key1    RN
0    1            1         a       1    
1    2            10        a       2 
2    2            2         a       3
3    3            3         b       1
4    3            30        a       4

He intentado lo siguiente que he llegado a trabajar donde no hay 'particiones':

def row_number(frame,orderby_columns, orderby_direction,name):
    frame.sort_index(by = orderby_columns, ascending = orderby_direction, inplace = True)
    frame[name] = list(xrange(len(frame.index)))

Intenté extender esta idea para trabajar con particiones (grupos en pandas) pero lo siguiente no funcionó:

df1 = df.groupby('key1').apply(lambda t: t.sort_index(by=['data1', 'data2'], ascending=[True, False], inplace = True)).reset_index()

def nf(x):
    x['rn'] = list(xrange(len(x.index)))

df1['rn1'] = df1.groupby('key1').apply(nf)

Pero acabo de recibir muchos NaN cuando hago esto.

Idealmente, habría una forma sucinta de replicar la función de la función de ventana de sql (he descubierto los agregados basados ​​en la ventana ... eso es un liner en pandas) ... alguien puede compartir conmigo la forma más idiomática de ¿Numerosas filas como esta en PANDAS?

Respuestas a la pregunta(4)

Su respuesta a la pregunta