我有一个名为pd
的Pandas数据框,我使用以下命令在此数据框的一列中提取唯一值的数量:
b = df.groupby('Region').size()
b是Pandas系列对象,如下所示:
In [48]: b
Out[48]:
Region
0 8
1 25
11 1
2 41
3 23
4 15
5 35
6 24
7 27
8 50
9 55
N 10
我试图绘制这个系列的条形图,但是,我想先根据第一列(因为11在1和2之间)对它进行排序,这将是x轴标签。我尝试传递sort命令,但它根据第二列中的值对系列进行排序:
b.sort()
In [48]: b
Out[54]:
Region
11 1
0 8
N 10
4 15
3 23
6 24
1 25
7 27
5 35
2 41
8 50
9 55
嗯,有没有办法根据第一列对这个系列进行排序?
答案 0 :(得分:13)
您正在寻找sort_index:
In [80]: b.sort_values()
Out[80]:
6 1
11 2
9 2
1 4
10 4
2 5
3 6
4 7
8 8
5 9
dtype: int64
In [81]: b.sort_index()
Out[81]:
1 4
2 5
3 6
4 7
5 9
6 1
8 8
9 2
10 4
11 2
dtype: int64
答案 1 :(得分:8)
只有1'列'的值。第一个“列”是索引。 Docs are here
In [8]: s = Series([3,2,1],index=[1,3,2])
In [9]: s
Out[9]:
1 3
3 2
2 1
dtype: int64
按索引排序
In [10]: s.sort_index()
Out[10]:
1 3
2 1
3 2
dtype: int64
按值排序
In [11]: s.sort_values()
Out[11]:
2 1
3 2
1 3
dtype: int64
答案 2 :(得分:2)
您需要将索引转换为对象索引,因为它当前按字典顺序排序,而不是数字排序:
In [97]: s = read_clipboard(header=None)
In [98]: news = s.rename(columns=lambda x: ['Region', 'data'][x])
In [99]: news
Out[99]:
Region data
0 0 8
1 1 25
2 11 1
3 2 41
4 3 23
5 4 15
6 5 35
7 6 24
8 7 27
9 8 50
10 9 55
11 N 10
In [100]: news_converted = news.convert_objects(convert_numeric=True)
In [101]: news_converted
Out[101]:
Region data
0 0 8
1 1 25
2 11 1
3 2 41
4 3 23
5 4 15
6 5 35
7 6 24
8 7 27
9 8 50
10 9 55
11 NaN 10
In [102]: news_converted.loc[11, 'Region'] = 'N'
In [103]: news_converted_with_index = news_converted.set_index('Region')
In [104]: news_converted_with_index
Out[104]:
data
Region
0.0 8
1.0 25
11.0 1
2.0 41
3.0 23
4.0 15
5.0 35
6.0 24
7.0 27
8.0 50
9.0 55
N 10
In [105]: news_converted_with_index.sort_index()
Out[105]:
data
Region
0.0 8
1.0 25
2.0 41
3.0 23
4.0 15
5.0 35
6.0 24
7.0 27
8.0 50
9.0 55
11.0 1
N 10
最有可能更好的方法来创建Series
,以便它不会混合索引类型。