9

という Pandas データフレームがありpd、次のコマンドを使用して、このデータフレームの列の 1 つで一意の値の数を抽出します。

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

このシリーズの棒グラフをプロットしようとしていますが、最初の列に基づいて最初に並べ替えたいと思います (1 と 2 の間の 11 のため)。これが x 軸のラベルになります。sort コマンドを渡そうとしましたが、2 番目の列の値に基づいて系列を並べ替えます。

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

さて、最初の列に基づいてこのシリーズを並べ替える方法はありますか?

4

3 に答える 3

16

あなたは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
于 2013-10-02T19:03:30.253 に答える
8

値の「列」は 1 つだけです。最初の「列」はインデックスです。 ドキュメントはこちら

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
于 2013-10-02T19:06:51.823 に答える
5

現在、数値ではなく辞書順でソートされているため、インデックスをオブジェクトインデックスに変換する必要があります。

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インデックスの種類が混在しないように作成するより良い方法がある可能性が最も高いです。

于 2013-10-02T19:30:14.267 に答える