2017-02-22 6 views
1

У меня есть dataframe, который выглядит следующим образом. Я сделал свои континенты своим полем Индекс. Я хочу, чтобы он немного отличался. Я хотел бы получить dataframe только у 3 континента и затем все страны, которые подпадают под действие этого континента, чтобы показать как счетчикГруппировка и добавление вычисленных столбцов в мой информационный кадр

Continent Country  

Oceania Australia 53  154.3 203.6 209.9 
Europe Austria 28.2 49.3 59.7 59.9 
Europe Belgium 33.2 70.3 83.4 82.8 
Europe Denmark 18.6 26.0 38.9 36.1 
Asia  Japan  382.9 835.5 1028.1 1049.0 

Так что мой выход будет выглядеть такой: и он будет показывать только число стран этого континента. Я хотел бы также, как это, когда он сочетает в себе все в NUM_COUNTRIES, что дает среднее значение всего для этой страны, так его все в одном лице для каждого континента

Continent num_Countries  mean 

Oceania  1    209.9 
Europe  3    328.2 
Asia   1    382.9 

Я попытался создать эти столбцы, но я могу получить новые столбцы для создания, и когда я это делаю, они появляются как ценности Нан, а для континентов я не могу заставить функцию groupby() работать так, как я ее хочу, потому что она не перекачивает все страны в просто континенты, где она отображает полный список континентов и стран.

ответ

0

Для этого можно использовать сводную таблицу. (I пометили немаркированные столбцы с 1 до 4)

df.pivot_table(index="Continent", values=["Country", "1"], 
       aggfunc=('count', 'mean')) 
0

следующих групп по «Континент» и применяет функцию, которая подсчитывает количество стран и находит среднее значение средств (я предположил, что это то, что вы хотели, так как у вас есть 4 столбца числовых данных для ряда стран на континент).

def f(group): 
    return pd.DataFrame([{'num_Countries': group.Country.count(), 
          'mean': group.mean().mean()}]) 
grouped = df.groupby('Continent') 
result = grouped.apply(f).reset_index(level=1, drop=True) 
+0

Да, это сработало спасибо! – Cannon

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