Сортировка значения столбца в мультииндексированном фрейме данных с циклом - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть фрейм данных с 2 индексами, один для стран (20 стран) и один для лет (период 10 лет). Для каждого кортежа у меня есть 2 столбца с данными. Я сделал for l oop, чтобы увеличить значения в первом столбце по годам для каждой страны (и иметь кумулятивное значение за последние годы, а не значение года).

for country in data.index.get_level_values(level=0).unique():
    for year in range(2005,2015):
        data['Col1'].loc[country,year+1]=data['col1'].loc[country,year]+data['col1'].loc[country,year+1]

Это работает хорошо (хотя должен быть более элегантный способ сделать это) Затем я пытался упорядочить свои страны по убыванию значений col1. поэтому я добавил эту строку:

data.loc[country]=data.loc[country].sort_values(by=['col1'])

В моей «стране» l oop. Но то, что я получаю, - это мой массив данных, заполненный значениями NaN. Затем я попробовал разные sort_values, sort_index, но ничего не получалось. Я также попытался сгруппировать по значению интереса в col1 (последний, самый большой), и попытаться сгруппировать, а затем отсортировать индекс.

data.groupby(data['col1'].loc[country,2014]).sort_index(level=0,ascending=False)

Но он возвращает мне хороший KeyError: 5270

Вот пример того, что у меня есть:

    ``````````````````````````````
                      col1 | col2
    Country |  Year |      |
    Brasil  |  2006 |   3  |
            |  2007 |   12 |
            |  2014 |   150|
``````````````````````````````````
    Germany |  2006 |   33 |
            |  2007 |   64 |
            |  2014 |   750|

И я хотел бы иметь это:

    ``````````````````````````````
                      col1 | col2
    Country |  Year |      |
    Germany |  2006 |   33 |
            |  2007 |   64 |
            |  2014 |   750|
``````````````````````````````````
    Brazil  |  2006 |   3  |
            |  2007 |   12 |
            |  2014 |   150|

Исходя из того факта, что Col1 (2014) выше для Германия, а не Бразилия

РЕДАКТИРОВАТЬ Мне удалось отсортировать мой индекс по Col1 (2014):

data['Col1'].loc[:,2014].sort_values(ascending=False)

, что дает мне серию. Сейчас я ищу лучший способ использовать это расположение индексов для всего моего фрейма данных.

...