hoe panda’s dataframe uit één kolom te sorteren

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_valuesom 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_valuesmet de kolomlabels geordend op sorteerprioriteit. Als u df.sort_values(['2', '0'])gebruikt, wordt het resultaat gesorteerd op kolom 2en 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 namezoals 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 sorteduitvoer van labels als een dataframe

   index   label
0   test        2
1   experiment  1

Antwoord 6

Panda’s sort_valuesdoet 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 dfals

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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

two × 4 =

Other episodes