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)
追加する必要があると思いますreset_index
、次にパラメータascending=False
から sort_values
sort
が返されるため:
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)
size
と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
私はあなたのdfがどのように見えるのか正確には知りません。ただし、いくつかのカテゴリの頻度をカウントでソートする必要がある場合は、dfからシリーズをスライスしてシリーズをソートする方が簡単です。
series = df.count().sort_values(ascending=False)
series.head()
このシリーズは、インデックスとしてカテゴリの名前を使用することに注意してください!
@Christoph Schranzがデータフレームからシリーズをスライスすることに同意します
df[['STNAME','CTYNAME']].groupby('STNAME')['CTYNAME'].count().nlargest(3)