2017-01-02 2 views
1

Warum dieser CodeTypeerror: ("sort_values ​​() bekam mehrere Werte für Argument 'Achse'", 'trat bei Index SUMLEV')

cdf = census_df[census_df['SUMLEV'] == 50] 
cdf = cdf.apply(lambda x:x.sort_values('CENSUS2010POP', axis=0, ascending=False)).reset_index(drop=True) 
cdf = cdf.groupby('STNAME').head(3) 
cdf.head(20) 

gibt die folgenden Fehler

TypeError: ("sort_values() got multiple values for argument 'axis'", 'occurred at index SUMLEV') 

Während dieses Code funktioniert gut

cdf = census_df[census_df['SUMLEV'] == 50] 
cdf = cdf.groupby('STNAME') 
cdf = cdf.apply(lambda x:x.sort_values('CENSUS2010POP', axis=0, ascending=False)).reset_index(drop=True) 
cdf = cdf.groupby('STNAME').head(3) 
cdf.head(20) 

Aber hier musste ich zweimal groupby tun, zuerst vor dem sortieren und nach dem sortieren Top-3-Werte zu wählen. Ich wollte zuerst sortieren, dann gruppieren und dann 3 für jede Gruppe auswählen.

CSV-Datei kann here

Dank bestellt werden!

Antwort

2

Sie müssen die Linie ändern:

cdf = cdf.apply(lambda x:x.sort_values('CENSUS2010POP', axis=0, ascending=False)).reset_index(drop=True) 

zu:

cdf = cdf.sort_values('CENSUS2010POP', ascending=False).reset_index(drop=True) 

Wenn .sort_values() auf Datenrahmen angewendet wird, werden alle Spalten von der Spalte sortieren Sie angegeben, dh CENSUS2010POP in dieser Fall. Sie müssen die Sortierung nicht auf alle Spalten anwenden.

+0

Eigentlich bekomme ich Fehler: AttributeError: Kann nicht auf Callable-Attribut 'sort_values' von 'DataFrameGroupBy' Objekte zugreifen, versuchen Sie mit der 'apply' Methode – YohanRoth

+0

Ich denke, Sie verwenden 'groupby' vor dem Sortieren. Sie können 'sort_values ​​()' direkt auf den ursprünglichen Datenrahmen ohne groupby anwenden. und Gruppendatenrahmen später. Da [pandas group by ist stabil] (http://stackoverflow.com/questions/39373820/is-pandas-dataframe-groupby-guaranteed-to-be-stable), bleibt der Datenrahmen nach der Gruppe nach sortiert. – Psidom

Verwandte Themen