2017-01-11 3 views
2

Новое для python, похоже, не может понять, как действовать. После использования корзины и редактирования моего кадра данных я был в состоянии придумать с этим:Проблема с объединением повторяющихся значений/строк

Continents % Renewable Country 
0 Asia (15.753, 29.227] China 
1 North America (2.212, 15.753] United States 
2 Asia (2.212, 15.753] Japan 
3 Europe (2.212, 15.753] United Kingdom 
4 Europe (15.753, 29.227] Russian Federation 
5 North America (56.174, 69.648] Canada 
6 Europe (15.753, 29.227] Germany 
7 Asia (2.212, 15.753] India 
8 Europe (15.753, 29.227] France 
9 Asia (2.212, 15.753] South Korea 
10 Europe (29.227, 42.701] Italy 
11 Europe (29.227, 42.701] Spain 
12 Asia (2.212, 15.753] Iran 
13 Australia (2.212, 15.753] Australia 
14 South America (56.174, 69.648] Brazil 

Теперь, когда я установил Континенты и% Возобновляемые как miltiindex с помощью:

Top15 = Top15.groupby(by=['Continents', '% Renewable']).sum() 

получить следующий :

      Country 
Continents % Renewable 
Asia (15.753, 29.227] China 
     (2.212, 15.753] JapanIndiaSouth KoreaIran 
Australia (2.212, 15.753] Australia 
Europe (15.753, 29.227] Russian FederationGermanyFrance 
     (2.212, 15.753] United Kingdom 
     (29.227, 42.701] ItalySpain 
North America (2.212, 15.753] United States 
       (56.174, 69.648] Canada 
South America (56.174, 69.648] Brazil 

Теперь я хотел бы иметь колонку, которая дала бы мне число стран в каждом индексе именно:

В 1-й ряд - Китай = 1,

и в второй Роу JapanIndiaSouth KoreaIran будет 4

Таким образом, в конце концов, я хочу что-то вроде этого:

Asia   (2.212, 15.753]  4 
       (15.753, 29.227] 1 

Я просто надеваете» я знаю, как туда добраться.

Кроме того, цифры необходимо сортировать в порядке убывания, сохраняя при этом группировку индексов.

ответ

2
Top15.groupby(['Continents', '% Renewable']).Country.count() 

Continents  % Renewable  
Asia   (15.753, 29.227] 1 
       (2.212, 15.753]  4 
Australia  (2.212, 15.753]  1 
Europe   (15.753, 29.227] 3 
       (2.212, 15.753]  1 
       (29.227, 42.701] 2 
North America (2.212, 15.753]  1 
       (56.174, 69.648] 1 
South America (56.174, 69.648] 1 
Name: Country, dtype: int64 

Для сортировки в порядке вы хотите

Top15_count = Top15.groupby(['Continents', '% Renewable']).Country.count() 

Top15_count.reset_index() \ 
    .sort_values(
     ['Continents', 'Country'], 
     ascending=[True, False] 
    ).set_index(['Continents', '% Renewable']).Country 

Continents  % Renewable  
Asia   (2.212, 15.753]  4 
       (15.753, 29.227] 1 
Australia  (2.212, 15.753]  1 
Europe   (15.753, 29.227] 3 
       (29.227, 42.701] 2 
       (2.212, 15.753]  1 
North America (2.212, 15.753]  1 
       (56.174, 69.648] 1 
South America (56.174, 69.648] 1 
Name: Country, dtype: int64 
+0

спасибо, но есть ли способ, чтобы он снисходит заказ? как в случае Азии 4 - это первая строка, а 1 - следующая. –

+0

Большое вам спасибо! –

2

Решение с size:

What is the difference between size and count in pandas?

print (Top15.groupby(['Continents', '% Renewable']).size()) 
Name: Country, dtype: int64 
Continents  % Renewable  
Asia   (15.753, 29.227] 1 
       (2.212, 15.753]  4 
Australia  (2.212, 15.753]  1 
Europe   (15.753, 29.227] 3 
       (2.212, 15.753]  1 
       (29.227, 42.701] 2 
North America (2.212, 15.753]  1 
       (56.174, 69.648] 1 
South America (56.174, 69.648] 1 
dtype: int64 

Использование sort_values в случае необходимости изменить порядок и dataframe добавить reset_index, последний при необходимости MultiIndex добавить set_index:

print (Top15.groupby(['Continents', '% Renewable']) \ 
      .size() \ 
      .reset_index(name='COUNT') \ 
      .sort_values(['Continents', 'COUNT'], ascending=[True, False]) \ 
      .set_index(['Continents','% Renewable']).COUNT) 

Continents  % Renewable  
Asia   (2.212, 15.753]  4 
       (15.753, 29.227] 1 
Australia  (2.212, 15.753]  1 
Europe   (15.753, 29.227] 3 
       (29.227, 42.701] 2 
       (2.212, 15.753]  1 
North America (2.212, 15.753]  1 
       (56.174, 69.648] 1 
South America (56.174, 69.648] 1 
Name: COUNT, dtype: int64 
+0

спасибо, но есть ли способ, чтобы он был убывающим? как в случае Азии 4 - это первая строка, а 1 - следующая. –

+0

Извините, для этого, но мне нужно, чтобы Азия 4 и азия 1 были вместе, т.е. первая строка была азией со значением 4, затем 1, а затем Австралия со строкой со значением 3, затем 2, затем 1. В основном индекс получает первый приоритет в сортировка az, а затем значения после этого. –

+0

Спасибо вам за помощь! получил ответ! –

Смежные вопросы