Как выполнить групповую работу и показать данные для определенных значений столбцов с помощью панд - PullRequest
0 голосов
/ 25 января 2019

Пожалуйста, найдите образец данных

country  total_funding_usd      sectors
--------------------------------------------
USA         2000000             education
USA         120000              Medical
USA         8000000             Retail
IND         290000              Retail
IND         120000              Medical
CHINA       1100000             Healthcare
CHINA       120000              Medical
AUS         1100000             Retail
AUS         8000000             Medical
AUS         700000              Healthcare

Запрос: - хотите увидеть две верхние страны, которые получили наибольшее общее финансирование (для секторов медицины, розничной торговли)?

Я мог бы работать в групповом режиме, но я не мог печатать только две лучшие страны, а также для отдельных секторов.Это показывает все записи.Все, что я попробовал, как показано ниже.Пожалуйста, помогите

master_frame.groupby('country')['total_funding_usd'].max().head()

ожидаемый результат:

country       sectors   total_funding_usd 
——————————————————————-------------------

USA     Medical        120000   
        Retail         8000000  

AUS     Medical        8000000
        Retail         1100000

1 Ответ

0 голосов
/ 25 января 2019

сначала используйте boolean indexing для фильтрации, затем агрегируйте sum и получите топ-2 по Series.nlargest и отфильтруйте снова с isin:

df2 = df[df['sectors'].isin(['Medical','Retail'])]

idx = df2.groupby('country')['total_funding_usd'].sum().nlargest(2).index

df3 = df2[df2['country'].isin(idx)]
print (df3)
  country  total_funding_usd  sectors
1     USA             120000  Medical
2     USA            8000000   Retail
7     AUS            1100000   Retail
8     AUS            8000000  Medical

Подробности :

print (df2.groupby('country')['total_funding_usd'].sum())
country
AUS      9100000
CHINA     120000
IND       410000
USA      8120000
Name: total_funding_usd, dtype: int64

print (df2.groupby('country')['total_funding_usd'].sum().nlargest(2))
country
AUS    9100000
USA    8120000
Name: total_funding_usd, dtype: int64

print (df2.groupby('country')['total_funding_usd'].sum().nlargest(2).index)
Index(['AUS', 'USA'], dtype='object', name='country')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...