提取熊猫值value_counts()


77

假设我们使用的熊猫dataframe[column].value_counts()输出:

 apple   5 
 sausage 2
 banana  2
 cheese  1

您如何从max到min以上面显示的相同顺序提取值?

例如: [apple,sausage,banana,cheese]


1
您能提供MCVE吗?您使用dataframe.value_counts()还是series.value_counts()?您在哪种数据类型中输出?
艾伯特

3
请注意,的输出value_counts()是一个系列,因此可以使用任何系列方法,但是通常您只是按原样保存它,这取决于以后要使用的方法。
JohnE

Answers:


105

尝试这个:

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

太棒了!另一方面,在打印时,dataframe[column].value_counts()您会在底部看到dtype。有没有办法做到这一点?
JamesButterlips

24
试试:dataframe[column].value_counts().to_frame()
MikeMüller'16

1
还有一个选择,.value_counts().index以及.value_counts().values
Aray Karjauv

38
#!/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()

现在,print(df['country'].value_counts())给出:

France       3
Germany      2
UK           1
Indonesia    1

print(values)给出:

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

print(counts)给出:

[3, 2, 1, 1]

18

如果有人在评论中错过了它,请尝试以下操作:

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

3

提取值的最佳方法是执行以下操作

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

这将返回一个字典,您可以像其他字典一样使用它。使用值或键。

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

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

2

首先,你必须sortdataframecountmaxmin,如果没有排序已经如此。在您的帖子中,它的顺序已经正确,但sort无论如何我都会这样做:

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

然后,您可以将col列输出到列表:

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

-1

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

其中:label_Name的意思是column_name

结果(我的情况):-

0    29720 
1     2242 
Name: label, dtype: int64
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.