このデータフレームを考えると:
df
animal location number
0 lions zoo1 10
1 tigers zoo2 200
2 bears zoo2 300
3 ohmy zoo2 400
4 antelopes zoo1 20
5 orangutans zoo2 500
6 zebras zoo1 30
動物園ごとに上位3匹の動物を見つけ、動物の種類に関係なく合計して、どの動物園が最も動物が多いかをランク付けする必要があります。場所や動物で選択してグループ化できるようになりました。今やるべきことは、場所をキーとし、各場所の合計を値とするシリーズを作成することだと思いますが、私は立ち往生。(それがそれにアプローチするための最良の方法ではない場合、私は提案を受け入れます。)
df.set_index(['location','number'], inplace=True)
df.groupby(level=[0,1]).sum().reset_index().sort_values(['location', 'number'], ascending=[1,0]).groupby('location').head(3)
location number animal
2 zoo1 30 zebras
1 zoo1 20 antelopes
0 zoo1 10 lions
6 zoo2 500 orangutans
5 zoo2 400 ohmy
4 zoo2 300 bears
(sum()
このコンテキストでは何もしていないようですが、何かを持っているgroupby()
必要があり、もっと良いものがあるかどうかわかりません。)ここから探しているのは次のとおりです。
zoo2 1200
zoo1 60
初期dfを作成するコード:
df = pd.DataFrame({'animal': ['lions', 'tigers', 'bears', 'ohmy', 'antelopes', 'orangutans','zebras'],
'location': ['zoo1', 'zoo2', 'zoo2', 'zoo2', 'zoo1', 'zoo2', 'zoo1'],
'number': [10, 200, 300, 400, 20, 500, 30]})
初期データフレームの使用:
df
animal location number
0 lions zoo1 10
1 tigers zoo2 200
2 bears zoo2 300
3 ohmy zoo2 400
4 antelopes zoo1 20
5 orangutans zoo2 500
6 zebras zoo1 30
groupbyを使用する:
df.groupby('location')['number'].apply(lambda x: x.sort_values(ascending=False).head(3).sum())
出力:
location
zoo1 60
zoo2 1200
Name: number, dtype: int64
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加