Сортировка строки типа MultiIndex в пандах - PullRequest
0 голосов
/ 05 мая 2018

У меня есть следующий пандас с MultiIndex.

Мне нужно отсортировать сначала по 'Ccy', а затем по 'Spot'. Проблема в том, что индекс «Spot» - это строки, поэтому он не сортируется должным образом.

import pandas as pd
import numpy as np

idx = pd.MultiIndex.from_product([['USDCLP', 'USDMXN', 'USDBRL','EURUSD'],
                                  ['500.50', '33.5', '109.40','88','101.89','1103.18']],
                                 names=['Ccy', 'Spot'])
col = ['A', 'B', 'C']

df = pd.DataFrame(np.nan, idx, col)
df = df.sort_index(level=['Ccy','Spot'], ascending=True)

print df

                 A   B   C
Ccy    Spot               
EURUSD 101.89  NaN NaN NaN
       109.40  NaN NaN NaN
       1103.18 NaN NaN NaN
       33.5    NaN NaN NaN
       500.50  NaN NaN NaN
       88      NaN NaN NaN
USDBRL 101.89  NaN NaN NaN
       109.40  NaN NaN NaN
       1103.18 NaN NaN NaN
       33.5    NaN NaN NaN
       500.50  NaN NaN NaN
       88      NaN NaN NaN
USDCLP 101.89  NaN NaN NaN
       109.40  NaN NaN NaN
       1103.18 NaN NaN NaN
       33.5    NaN NaN NaN
       500.50  NaN NaN NaN
       88      NaN NaN NaN
USDMXN 101.89  NaN NaN NaN
       109.40  NaN NaN NaN
       1103.18 NaN NaN NaN
       33.5    NaN NaN NaN
       500.50  NaN NaN NaN
       88      NaN NaN NaN

Я попытался сначала преобразовать индекс в число с плавающей точкой, чтобы потом отсортировать его так:

df = df.index.levels[1].astype('float')
df = df.sort_index(level=['Ccy','Spot'], ascending=True)

Но выдайте следующую ошибку:

AttributeError: 'Float64Index' object has no attribute 'sort_index'

Как отсортировать индекс «Spot» по возрастанию?

1 Ответ

0 голосов
/ 05 мая 2018

Вы можете сделать два шага

df=df.reset_index(level=1)

df.assign(Spot=df.Spot.astype(float)).set_index('Spot',append=True).sort_index()
Out[12]: 
                 A   B   C
Ccy    Spot               
EURUSD 33.50   NaN NaN NaN
       88.00   NaN NaN NaN
       101.89  NaN NaN NaN
       109.40  NaN NaN NaN
       500.50  NaN NaN NaN
       1103.18 NaN NaN NaN
USDBRL 33.50   NaN NaN NaN
       88.00   NaN NaN NaN
       101.89  NaN NaN NaN
       109.40  NaN NaN NaN
       500.50  NaN NaN NaN
       1103.18 NaN NaN NaN
USDCLP 33.50   NaN NaN NaN
       88.00   NaN NaN NaN
       101.89  NaN NaN NaN
       109.40  NaN NaN NaN
       500.50  NaN NaN NaN
       1103.18 NaN NaN NaN
USDMXN 33.50   NaN NaN NaN
       88.00   NaN NaN NaN
       101.89  NaN NaN NaN
       109.40  NaN NaN NaN
       500.50  NaN NaN NaN
       1103.18 NaN NaN NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...