2017-05-05 4 views
1

Ich bin sicher, dass dies wahrscheinlich einfach ist, aber ich bin mir nicht sicher, wie es geht.Python Pandas - Bewegende Reihen um

ich einen Datenrahmen (Pivot-Tabelle) mit 4 Zeilen haben, nennen wir sie A, B, C, D.

Nun, ich möchte, dass sie nicht in alphabetischer Reihenfolge, aber ich möchte, dass sie als B , C, A, D gehen nach unten.

Wie verschiebe ich Zeilen? In Excel würde ich es einfach ausschneiden und einfügen. Kann ich das in Python machen?

Vielen Dank

Antwort

3

Verwendenloc
loc ermöglicht es Ihnen, einen Indexer zu übergeben, die mit den entsprechenden Etiketten

df.loc[['B', 'C', 'A', 'D']] 

zu den Zeilen (Spalten) bezieht sich numpy
Kern Overkill ... aber schneller

i = df.index.values 
v = df.values 
a = i.argsort() 
u = np.empty_like(a) 
r = np.arange(a.size) 
u[a] = r 
n = list('BCAD') 
pd.DataFrame(v[i[a].searchsorted(n)[u]], n, df.columns) 

Zeit
Testdaten

df = pd.DataFrame(dict(A=range(4)), list('ABCD')) 

Ergebnisse

%timeit df.loc[list('BCAD')] 
1000 loops, best of 3: 361 µs per loop 

%%timeit 
i = df.index.values 
v = df.values 
a = i.argsort() 
u = np.empty_like(a) 
r = np.arange(a.size) 
u[a] = r 
n = list('BCAD') 
pd.DataFrame(v[i[a].searchsorted(n)[u]], n, df.columns) 
10000 loops, best of 3: 135 µs per loop 
+0

Ahhh, danke immer so sehr. Ich werde Ihre Antwort als richtig markieren, sobald es mir erlaubt. Danke, dass du so schnell bist :) – ScoutEU

+0

@ScoutEU du bist willkommen. Froh, dass ich helfen konnte. – piRSquared

+0

Vielen Dank, dass Sie sich die Zeit genommen haben, zusätzliche Details einzugeben (für mich und andere, die diese Seite finden könnten), sehr hilfreich für mein Lernen. – ScoutEU

2

Da die einfache Antwort bereits gegeben worden ist, ist hier eine Alternative: eine categorical index verwenden.

cats = pd.Categorical(list('ABCD'), categories=['B','C','A','D']) 
df = pd.DataFrame([1,2,3,4], index=cats) 
df.sort_index() 
+1

Ich wollte das auch erwähnen. Schön, dass du es getan hast. – piRSquared

+0

Danke, immer gut Alternativen zu haben :) – ScoutEU