Как вы группируете, сортируете и ограничиваете в Python Pandas?(т.е. получить Топ 10) - PullRequest
0 голосов
/ 23 мая 2018

У меня есть кадр данных Pandas, в котором есть столбцы actor_id и account_id.Актер - это человек, а аккаунт - это просто аккаунт.Таким образом, у одного человека может быть несколько учетных записей, а в учетных записях может быть несколько человек.

Моя цель - сгруппировать по actor_id, а затем ранжировать actor_ids по количеству учетных записей, которые у него есть, чтобы я мог получить списокТоп 10 актеров с наибольшим количеством аккаунтов.

В SQL это будет что-то вроде SELECT actor_id, account_id, COUNT (account_id) GROUP BY actor_id LIMIT 10. Но я пытаюсь сделать это в Python.

Я ссылался на эту группу панд и сортировал по индексу , но у меня это не сработало.Ниже приведен код, который я пробовал.

df['count'] = df['actor_id'].map(df['account_id'].value_counts())
df.sort_index('count', ascending=False)

Набор данных выглядит следующим образом: Dataset

На рисунке замените project_id на account_id.

1 Ответ

0 голосов
/ 24 мая 2018

Я думаю, что вы можете сделать:

df_nb_acc = df.groupby('actor_id')['account_id']\ # groupby actor_id and select the column account_id
               .count()\ # count the number of accout per actor
               .reset_index()\ # actor_id become a column and not indexes 
               .rename(columns={'account_id':'Nb_account'})\ # to rename the column
               .sort_values('Nb_account',axis=1, ascending=False)
               # to sort the value on the column Nb_account, largest to smallest

И чтобы получить 10 лучших, тогда выполните df_nb_acc.head(10)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...