如果我这样做
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还是需要使用其他函数。
答案 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)**