如何基于列和值的范围创建多索引序列并检查其排序是否正确?

2024-10-02 04:17:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个基于字母D、E、F的系列,并以这种方式在每行中插入0到9的值:

 df = pd.DataFrame({'letters': list('DDDDDDDDDDEEEEEEEEEEFFFFFFFFFF'), 'numbers': [0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9]})

  Output: 


  letters  numbers  
  0        D        0
  1        D        1
  2        D        2
  ....
  9        D        9
  10       E        0
  .....
  18       E        8
  19       E        9
  20       F        0
  ......
  28       F        8
  29       F        9

然后我用这段代码在这个Df上创建了多索引(我想检查这是正确的方法还是有其他方法来创建多索引)

  latestone = df.set_index(['letters', 'numbers'],drop=False)

output: 


                letters  numbers
 letters numbers                 
    D       0             D        0
            1             D        1
            ....
            9             D        9
    E       0             E        0
            1             E        1
            ...
            9             E        9
    F       0             F        0
            1             F        1
            ...
            9             F        9

基于这一点,或者是否有更好的方法来创建多索引,我想知道这些值是否按字典顺序排序(如果可能的话,是真还是假)。你知道吗

另外,我想得到索引为[2,5,7]的行作为字母E


Tags: 方法代码dataframedfoutput字母方式list
2条回答

要创建索引对象,pd.MultiIndex.from_product在您的情况下会更容易。然后,您可以使用该索引创建一个包含您需要的任何值的数据帧。你知道吗

data = ...
mindex = pd.MultiIndex.from_product([list('DEF'), range(10)])
pd.DataFrame(data, index=mindex)

这不会改变顺序,但它是按照您定义的顺序。使用sort_index方法根据索引进行排序。您可以指定应首先对哪个级别进行排序。你知道吗

您想知道的一件事是值是否已排序。不,值没有排序。它们看起来完全是按安排的。你知道吗

要获取行[2,5,7],可以使用:

df.loc[[('E',2),('E',5),('E',7)]]
                letters  numbers
letters numbers                 
E       2             E        2
        5             E        5
        7             E        7

或者

In [578]: df.loc[('E',[2,5,7])]
Out[578]: 
                letters  numbers
letters numbers                 
E       2             E        2
        5             E        5
        7             E        7

相关问题 更多 >

    热门问题