更改value_counts中的排序

时间:2017-05-08 19:08:16

标签: python pandas dataframe

如果我这样做

mt = mobile.PattLen.value_counts()   # sort True by default

我得到了

4    2831
3    2555 
5    1561
[...]

如果我这样做

mt = mobile.PattLen.value_counts(sort=False) 

我得到了

8    225
9    120
2   1234 
[...]

我要做的是以2,3,4的升序(左侧数字列)获取输出。我可以以某种方式更改value_counts还是需要使用其他函数。

4 个答案:

答案 0 :(得分:50)

我认为您需要sort_index,因为左栏名为index。完整命令为mt = mobile.PattLen.value_counts().sort_index()。例如:

mobile = pd.DataFrame({'PattLen':[1,1,2,6,6,7,7,7,7,8]})
print (mobile)
   PattLen
0        1
1        1
2        2
3        6
4        6
5        7
6        7
7        7
8        7
9        8

print (mobile.PattLen.value_counts())
7    4
6    2
1    2
8    1
2    1
Name: PattLen, dtype: int64


mt = mobile.PattLen.value_counts().sort_index()
print (mt)
1    2
2    1
6    2
7    4
8    1
Name: PattLen, dtype: int64

答案 1 :(得分:2)

正如诺曼纽斯在 jezrael 的回答下的评论所暗示的:

>>> df = pd.DataFrame({"a":[1,1,2,6,6,7,7,7,7,8]})
>>> df.a.value_counts()[df.a.unique()]
1    2
2    1
6    2
7    4
8    1
Name: a, dtype: int64

通过明确提供自定义索引,可以按任何顺序排序:

>>> df.a.value_counts()[[8,7,6,2,1]]
8    1
7    4
6    2
2    1
1    2
Name: a, dtype: int64
>>> df.a.value_counts()[[1,8,6,2,7]]
1    2
8    1
6    2
2    1
7    4
Name: a, dtype: int64

这对于绘制分类数据特别有用:

>>> df.a.value_counts()[['hourly','daily','weekly','monthly']].plot(type="bar")

有趣的是,它可用于删除某些条目或使其他条目出现多次:

>>> df.a.value_counts()[[1,1,1,8]]
1    2
1    2
1    2
8    1
Name: a, dtype: int64

答案 2 :(得分:0)

如果您想要最大到最小的水平条,请使用 sort_values

 df['education'].value_counts().sort_values().plot.barh()

答案 3 :(得分:-1)

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# load the 'tips' dataset from seaborn
tips_data = sns.load_dataset('tips')
tips_data['size'].value_counts().**sort_index(0)**