Werte in Pandas extrahieren value_counts ()


75

Angenommen, wir haben Pandas verwendet, die Folgendes dataframe[column].value_counts()ausgeben:

 apple   5 
 sausage 2
 banana  2
 cheese  1

Wie extrahieren Sie die Werte in der oben gezeigten Reihenfolge von max bis min?

z.B: [apple,sausage,banana,cheese]


1
Könnten Sie bitte eine MCVE zur Verfügung stellen ? Hast du dataframe.value_counts()oder benutzt series.value_counts()? In welchem ​​Datentyp haben Sie die Ausgabe?
Albert

3
Beachten Sie, dass die Ausgabe von value_counts()eine Serie ist, sodass alle Serienmethoden verwendet werden können. Oft speichern Sie sie jedoch einfach so, wie sie ist, je nachdem, was Sie später damit tun möchten.
JohnE

Antworten:


105

Versuche dies:

dataframe[column].value_counts().index.tolist()
['apple', 'sausage', 'banana', 'cheese']

Genial! Wenn Sie drucken dataframe[column].value_counts(), wird unten ein D-Typ angezeigt. Gibt es einen Weg, das nicht zu bekommen?
JamesButterlips

23
Versuchen Sie:dataframe[column].value_counts().to_frame()
Mike Müller

1
eine weitere Option .value_counts().indexund.value_counts().values
Aray Karjauv

37
#!/usr/bin/env python

import pandas as pd

# Make example dataframe
df = pd.DataFrame([(1, 'Germany'),
                   (2, 'France'),
                   (3, 'Indonesia'),
                   (4, 'France'),
                   (5, 'France'),
                   (6, 'Germany'),
                   (7, 'UK'),
                   ],
                  columns=['groupid', 'country'],
                  index=['a', 'b', 'c', 'd', 'e', 'f', 'g'])

# What you're looking for
values = df['country'].value_counts().keys().tolist()
counts = df['country'].value_counts().tolist()

Nun print(df['country'].value_counts())gibt:

France       3
Germany      2
UK           1
Indonesia    1

und print(values)gibt:

['France', 'Germany', 'UK', 'Indonesia']

und print(counts)gibt:

[3, 2, 1, 1]

17

Wenn jemand es in den Kommentaren verpasst hat, versuchen Sie Folgendes:

dataframe[column].value_counts().to_frame()

2

Zuerst müssen Sie sortdie dataframedurch die countSpalte maxzu , minwenn es auf diese Weise schon nicht sortiert ist. In Ihrem Beitrag ist es bereits in der richtigen Reihenfolge, aber ich werde sortes trotzdem tun:

dataframe.sort_index(by='count', ascending=[False])
    col     count
0   apple   5
1   sausage 2
2   banana  2
3   cheese  1 

Dann können Sie die colSpalte in eine Liste ausgeben :

dataframe['col'].tolist()
['apple', 'sausage', 'banana', 'cheese']

2

Der beste Weg, um die Werte zu extrahieren, besteht darin, Folgendes zu tun

json.loads(dataframe[column].value_counts().to_json())

Dies gibt ein Wörterbuch zurück, das Sie wie jedes andere Diktat verwenden können. Werte oder Schlüssel verwenden.

 {"apple": 5, "sausage": 2, "banana": 2, "cheese": 1}

sorted(dict, key=lambda key: -dict[key])
Androbin

-1

Code

train["label_Name"].value_counts().to_frame()

Dabei gilt: label_Name Mittlerer Spaltenname

Ergebnis (mein Fall): -

0    29720 
1     2242 
Name: label, dtype: int64
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.