С учетом этого кадра данных:
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
Мне нужно найти трех лучших животных по зоопарку, суммировать их независимо от типа животных и затем определить, в каком зоопарке больше всего животных. Я дошел до того, что я могу выбирать и группировать по местоположению и животному, я думаю, что сейчас мне нужно создать серию с местоположением в качестве ключа и суммой каждого местоположения в качестве значения, но язастрял. (Если это не лучший способ приблизиться к этому, я открыт для предложений.)
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]})