web-dev-qa-db-ja.com

Pandas

2つの列でグループ化したファイルからの値のデータフレームがあり、集計のカウントを返します。最大カウント値で並べ替えたいのですが、次のエラーが発生します。

KeyError: 'カウント'

Agg count列でグループを検索すると、ある種のインデックスなので、これを行う方法がわかりません。私はPythonとPandaの初心者です。実際のコードは次のとおりです。詳細が必要:

def answer_five():
    df = census_df#.set_index(['STNAME'])
    df = df[df['SUMLEV'] == 50]
    df = df[['STNAME','CTYNAME']].groupby(['STNAME']).agg(['count']).sort(['count'])
    #df.set_index(['count'])
    print(df.index)
    # get sorted count max item
    return df.head(5)
25
Rubans

追加する必要があると思いますreset_index、次にパラメータascending=Falseから sort_valuessortが返されるため:

FutureWarning:sort(columns = ....)は非推奨です。sort_values(by = .....).sort_values(['count']、ascending = False)を使用してください

df = df[['STNAME','CTYNAME']].groupby(['STNAME'])['CTYNAME'] \
                             .count() \
                             .reset_index(name='count') \
                             .sort_values(['count'], ascending=False) \
                             .head(5)

サンプル:

df = pd.DataFrame({'STNAME':list('abscscbcdbcsscae'),
                   'CTYNAME':[4,5,6,5,6,2,3,4,5,6,4,5,4,3,6,5]})

print (df)
    CTYNAME STNAME
0         4      a
1         5      b
2         6      s
3         5      c
4         6      s
5         2      c
6         3      b
7         4      c
8         5      d
9         6      b
10        4      c
11        5      s
12        4      s
13        3      c
14        6      a
15        5      e

df = df[['STNAME','CTYNAME']].groupby(['STNAME'])['CTYNAME'] \
                             .count() \
                             .reset_index(name='count') \
                             .sort_values(['count'], ascending=False) \
                             .head(5)

print (df)
  STNAME  count
2      c      5
5      s      4
1      b      3
0      a      2
3      d      1

しかし、必要なようです Series.nlargest

df = df[['STNAME','CTYNAME']].groupby(['STNAME'])['CTYNAME'].count().nlargest(5)

または:

df = df[['STNAME','CTYNAME']].groupby(['STNAME'])['CTYNAME'].size().nlargest(5)

sizecountの違いは次のとおりです。

sizeNaNの値をカウントします count はカウントしません。

サンプル:

df = pd.DataFrame({'STNAME':list('abscscbcdbcsscae'),
                   'CTYNAME':[4,5,6,5,6,2,3,4,5,6,4,5,4,3,6,5]})

print (df)
    CTYNAME STNAME
0         4      a
1         5      b
2         6      s
3         5      c
4         6      s
5         2      c
6         3      b
7         4      c
8         5      d
9         6      b
10        4      c
11        5      s
12        4      s
13        3      c
14        6      a
15        5      e

df = df[['STNAME','CTYNAME']].groupby(['STNAME'])['CTYNAME']
                             .size()
                             .nlargest(5)
                             .reset_index(name='top5')
print (df)
  STNAME  top5
0      c     5
1      s     4
2      b     3
3      a     2
4      d     1
56
jezrael

私はあなたのdfがどのように見えるのか正確には知りません。ただし、いくつかのカテゴリの頻度をカウントでソートする必要がある場合は、dfからシリーズをスライスしてシリーズをソートする方が簡単です。

series = df.count().sort_values(ascending=False)
series.head()

このシリーズは、インデックスとしてカテゴリの名前を使用することに注意してください!

14

@Christoph Schranzがデータフレームからシリーズをスライスすることに同意します

df[['STNAME','CTYNAME']].groupby('STNAME')['CTYNAME'].count().nlargest(3)
0
Angelin Nadar