2017-12-16 6 views
1

Wie ordne ich einen Pandas-Dataframe-Index neu an?Wie ordne ich einen Pandas-Dataframe-Index neu an?

Ich habe folgende Datenrahmen:

df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7], 
        'B': [0, 1, 0, 2, 1, 7, 1]}, 
        index=['Sat', 'Tue', 'Sun', 'Fri', 
         'Wed', 'Mon', 'Thu']) 

die gibt:

 A B 
Sat 1 0 
Tue 2 1 
Sun 3 0 
Fri 4 2 
Wed 5 1 
Mon 6 7 
Thu 7 1 

ich nach Wochentag bestellen möchten, um den Index (dh So, Mo, Di, Mi, Do, Fr, Sa). Der Datenrahmen mit dem neu angeordneten/neu geordnet Index soll in etwa so aussehen:

 A B 
Sun 3 0 
Mon 6 7 
Tue 2 1 
Wed 5 1 
Thu 7 1 
Fri 4 2 

Aber mit df.sort_index() Ergebnisse in einem alphabetisch sortierten Index für df.

Wie lege ich explizit die Reihenfolge eines Dataframe-Index fest?

Die Lösung, die ich denken kann, ist die gewünschte Index Bestellung als Liste während Datenrahmen Schöpfung zu übergeben:

df = pd.DataFrame(df, index=['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri']) 

Was eine andere Art und Weise dies einen weiteren Datenrahmen ohne die Schaffung zu tun ist?

Vielen Dank.

Antwort

0

können Sie loc verwenden und eine Liste der Indizes in der Reihenfolge geben, dass Sie sie wollen:

df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7], 
        'B': [0, 1, 0, 2, 1, 7, 1]}, 
        index=['Sat', 'Tue', 'Sun', 'Fri', 
         'Wed', 'Mon', 'Thu']) 
df = df.loc[['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], :] 
df 
#  A B 
# Sun 3 0 
# Mon 6 7 
# Tue 2 1 
# Wed 5 1 
# Thu 7 1 
# Fri 4 2 
# Sat 1 0 
+0

@ralphqq ist es das, was nach der du bist? –

+0

Ja. Das funktioniert. – ralphqq

0

Sie haben nur ‚Woche‘ als Register in Ihrem Datenrahmen in der ersten Spalte hinzuzufügen.

# ascending 
df.sort_values('week') 
# reverse ascending 
df.sort_values('week', ascending=False) 

Oder vielleicht könnte dieser Punkt ist einfacher:

df.sort_index(inplace=True) 
print(df.to_string()) 
Verwandte Themen