Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pandas中对字符串类型的多索引进行排序_Python_Pandas - Fatal编程技术网

Python 在pandas中对字符串类型的多索引进行排序

Python 在pandas中对字符串类型的多索引进行排序,python,pandas,Python,Pandas,我有以下带有多索引的数据帧 我需要先按“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

我有以下带有多索引的数据帧

我需要先按“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'
如何以升序方式对“点”索引进行排序?

您可以执行两个步骤

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