SQL-ähnliche Fensterfunktionen in PANDAS: Zeilennummerierung in Python Pandas Dataframe

Ich komme aus einer sql-hintergrund und ich verwenden die folgenden Daten, Verarbeitungsschritt Häufig:

  1. Partition der Tabelle von Daten durch ein oder mehrere Felder
  2. Für jede partition, fügen Sie eine Zeilenzahl auf jeder seiner Reihen, die Reihen der Zeile durch eine oder mehrere andere Felder, auf denen der analyst gibt an, aufsteigend oder absteigend

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        

Ich bin auf der Suche nach, wie man die PANDAS äquivalent zu dieser sql-Fenster-Funktion:

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

Ich habe versucht, die folgenden die, die ich bekommen habe, zu arbeiten, wo es keine 'Partitionen':

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)))

Habe ich versucht zu verlängern, diese Idee zur Arbeit mit Partitionen (Gruppen pandas), aber Folgendes hat nicht funktioniert:

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)

Aber ich habe gerade eine Menge NaNs wenn ich dies tun.

Ideal, da würde es eine prägnante Art und Weise zu replizieren, die Fenster-Funktion-Funktion von sql (ich habe herausgefunden, das Fenster-basierte Aggregate...das ist ein Einzeiler in pandas)...kann jemand mit mir teilen die meisten idiomatischen Weg, um Anzahl Zeilen, wie dies in PANDAS?

InformationsquelleAutor der Frage AllenQ | 2013-07-21

Schreibe einen Kommentar