Ik heb een dataframe zoals dit:
print(df)
0 1 2
0 354.7 April 4.0
1 55.4 August 8.0
2 176.5 December 12.0
3 95.5 February 2.0
4 85.6 January 1.0
5 152 July 7.0
6 238.7 June 6.0
7 104.8 March 3.0
8 283.5 May 5.0
9 278.8 November 11.0
10 249.6 October 10.0
11 212.7 September 9.0
Zoals je kunt zien, staan de maanden niet in de kalendervolgorde. Dus ik heb een tweede kolom gemaakt om het maandnummer te krijgen dat overeenkomt met elke maand (1-12). Hoe kan ik van daaruit dit dataframe sorteren op volgorde van kalendermaanden?
Antwoord 1, autoriteit 100%
Gebruik sort_values
om de df te sorteren op de waarden van een specifieke kolom:
In [18]:
df.sort_values('2')
Out[18]:
0 1 2
4 85.6 January 1.0
3 95.5 February 2.0
7 104.8 March 3.0
0 354.7 April 4.0
8 283.5 May 5.0
6 238.7 June 6.0
5 152.0 July 7.0
1 55.4 August 8.0
11 212.7 September 9.0
10 249.6 October 10.0
9 278.8 November 11.0
2 176.5 December 12.0
Als u op twee kolommen wilt sorteren, geeft u een lijst met kolomlabels door aan sort_values
met de kolomlabels geordend op sorteerprioriteit. Als u df.sort_values(['2', '0'])
gebruikt, wordt het resultaat gesorteerd op kolom 2
en vervolgens op kolom 0
. Toegegeven, dit is niet echt logisch voor dit voorbeeld, omdat elke waarde in df['2']
uniek is.
Antwoord 2, autoriteit 29%
Ik heb de bovenstaande oplossingen geprobeerd en krijg geen resultaten, dus ik heb een andere oplossing gevonden die voor mij werkt. De ascending=Falseis om het dataframe in aflopendevolgorde te ordenen, standaard is het True. Ik gebruik de versies python 3.6.6 en panda’s 0.23.4.
final_df = df.sort_values(by=['2'], ascending=False)
Meer details vind je hier.
Antwoord 3, autoriteit 4%
Als een andere oplossing:
In plaats van de tweede kolom te maken, kunt u uw tekenreeksgegevens (naam van de maand) categoriseren en als volgt sorteren:
df.rename(columns={1:'month'},inplace=True)
df['month'] = pd.Categorical(df['month'],categories=['December','November','October','September','August','July','June','May','April','March','February','January'],ordered=True)
df = df.sort_values('month',ascending=False)
Het geeft je de geordende gegevens op month name
zoals je hebt opgegeven tijdens het maken van het Categorical
-object.
Antwoord 4, autoriteit 3%
Het gebruik van de kolomnaam werkte voor mij.
sorted_df = df.sort_values(by=['Column_name'], ascending=True)
Antwoord 5, autoriteit 2%
Gewoon wat meer bewerkingen op gegevens toevoegen. Stel dat we een dataframe hebben df
, dan kunnen we verschillende bewerkingen uitvoeren om de gewenste output te krijgen
ID cost tax label
1 216590 1600 test
2 523213 1800 test
3 250 1500 experiment
(df['label'].value_counts().to_frame().reset_index()).sort_values('label', ascending=False)
geeft sorted
uitvoer van labels als een dataframe
index label
0 test 2
1 experiment 1
Antwoord 6
Panda’s sort_values
doet het werk.
Als men van plan is dezelfde variabelenaam te behouden, vergeet dan niet de inplace=True
(dit voert de bewerking ter plaatse uit)
df.sort_values(by=['2'], inplace=True)
Je kunt de wijziging net zo goed toewijzen (sorteren) aan een variabele die dezelfde naam kan hebben, zoals de df
als
df = df.sort_values(by=['2'])
Het vergeten van de bovengenoemde stappen kan ertoe leiden (zoals dit gebruiker) om niet het verwachte resultaat te krijgen.
Merk op dat als men in aflopende volgorde wil, men ascending=False
moet doorgeven, zoals
df = df.sort_values(by=['2'], ascending=False)
Antwoord 7
Hier is een sjabloon van sort_values volgens de documentatie van panda’s.
DataFrame.sort_values(by, axis=0,
ascending=True,
inplace=False,
kind='quicksort',
na_position='last',
ignore_index=False, key=None)[source]
In dit geval zal het zo zijn.
df.sort_values(by=['2'])
API-referentie pandas.DataFrame.sort_values
Antwoord 8
Dit werkte voor mij
df.sort_values(by='Column_name', inplace=True, ascending=False)
Antwoord 9
Deze werkte voor mij:
df=df.sort_values(by=[2])
Terwijl:
df=df.sort_values(by=['2'])
werkt niet.
Antwoord 10
Voorbeeld:
Stel dat u een kolom heeft met waarden 1 en 0 en u wilt scheiden en slechts één waarde gebruiken, dan:
// meubels is een van de kolommen in het csv-bestand.
alle kamers = data.groupby(‘meubels’)[‘meubels’].agg(‘count’)
alle kamers
myrooms1 = pan.DataFrame(allrooms, columns = [‘furniture’], index = [1])
myrooms2 = pan.DataFrame(allrooms, columns = [‘furniture’], index = [0])
print(myrooms1);print(myrooms2)