сортировка pandas данных по сумме столбцов - PullRequest
3 голосов
/ 19 марта 2020

У меня есть фрейм данных, который выглядит следующим образом

            Australia  Austria    United Kingdom  Vietnam
date                                                    
2020-01-30          9        0                 1       2
2020-01-31          9        9                 4       2

Я хотел бы создать новый фрейм данных, который включает страны, у которых сумма столбца> 4, и я делаю это

df1 = df[[i for i in df.columns if int(df[i].sum()) > 4]]

это дает мне

            Australia  Austria    United Kingdom  
date                                                     
2020-01-30          9        0                 1      
2020-01-31          9        9                 4 

Теперь я хотел бы отсортировать страны по сумме их столбца, а затем взять первые 2

            Australia  Austria   
date                                    
2020-01-30          9        0        
2020-01-31          9        9

Я знаю, что должен использовать sort_values ​​ и tail . Я просто не могу тренироваться, как

Ответы [ 4 ]

4 голосов
/ 19 марта 2020

Первый фильтр для суммы больше, например 4, а затем добавьте Series.nlargest для суммы top2 и фильтр по значениям индекса:

s = df.sum()

df = df[s[s > 4].nlargest(2).index]
print (df)
            Australia  Austria
date                          
2020-01-30          9        0
2020-01-31          9        9

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

print (s)
Australia    18.0
Austria       9.0
United        5.0
Kingdom       4.0
Vietnam       0.0
dtype: float64

print (s[s > 4])
Australia    18.0
Austria       9.0
United        5.0
dtype: float64

print (s[s > 4].nlargest(2))
Australia    18.0
Austria       9.0
dtype: float64

print (s[s > 4].nlargest(2).index)
Index(['Australia', 'Austria'], dtype='object')
2 голосов
/ 19 марта 2020

IIU C, вы можете сделать:

s = df.sum()
df[s.sort_values(ascending=False).index[:2]]

Выход:

            Australia  Austria
date                          
2020-01-30          9        0
2020-01-31          9        9
1 голос
/ 19 марта 2020

еще один способ немного изменить ваш список.

cols = df[[i for i in df.columns if int(df[i].sum()) > 4]].stack().groupby(level=1).sum().head(2).index

#would yield the same result df.stack().groupby(level=1).sum().head(2).index


df[cols]

            Australia  Austria
date                          
2020-01-30          9        0
2020-01-31          9        9
1 голос
/ 19 марта 2020

Вы можете взять sum кадра данных вдоль первой оси, sort_values и взять первые n столбцы:

df[df.sum(0).sort_values(ascending=False)[:2].index]


               Australia  Austria
2020-01-30          9        0
2020-01-31          9        9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...