Python 如何对Pandas中的多索引列进行排序

Python 如何对Pandas中的多索引列进行排序,python,pandas,sorting,multi-index,Python,Pandas,Sorting,Multi Index,我正在尝试操纵一组多索引数组。每列都是一个具有不同类别分组的时间序列。我想对数据进行排序,然后解析所有类别,然后再进行一些额外的数据操作。下面是我尝试但没有成功的示例代码 import pandas as pd import numpy as np df=pd.DataFrame({'t': range(1,11)}) df.set_index(['t'],inplace=True) for num in range(2): labely = (str(num),'A','y')

我正在尝试操纵一组多索引数组。每列都是一个具有不同类别分组的时间序列。我想对数据进行排序,然后解析所有类别,然后再进行一些额外的数据操作。下面是我尝试但没有成功的示例代码

import pandas as pd
import numpy as np
df=pd.DataFrame({'t': range(1,11)})
df.set_index(['t'],inplace=True)

for num in range(2):
    labely = (str(num),'A','y')
    labelx = (str(num),'A','x')
    labelbx = (str(num),'B','x')
    df[labelx]= np.random.randn(10)
    df[labelbx]= np.random.randn(10)
    df[labely]= np.random.randn(10)+range(1,11)

df.columns = pd.MultiIndex.from_tuples(df.columns, names=['ID','Location','Direction']) 

df[('0','A','tot')]=df[('0','A','y')]+df[('0','A','x')]
df.sort_index(level='ID',inplace=True)
df.head()
这不合适。这是总数未与其他0 ID分组且位置未分组在一起的结果:

ID                0                        ...            1                   0
Location          A         B         A    ...            B         A         A
Direction         x         x         y    ...            x         y       tot
t                                          ...                                 
1          0.430386 -0.121109  0.263314    ...     0.243839  0.313505  0.693700
2         -1.262746 -0.678889  1.289814    ...    -0.893230  0.373103  0.027068
3          0.245483 -0.565859  3.766628    ...     0.012933  1.652484  4.012111
4          1.518357  0.447032  5.649877    ...    -1.205161  5.513507  7.168233
5         -0.095216 -0.571333  6.794958    ...    -0.777933  4.073334  6.699741
我有两个与此相关的问题

  • 如何对列进行排序,以便按每个 水平
  • 如何有效地解析数据帧 额外的数据操作 这是第二个问题的sudo代码

    for id in ID: 
         for loc in Location:
                   df[(id,loc,'tot')=df[(id,loc,'x')]+df[(id,loc,'y')]
    

    要按列排序,如轴=1:

    df.sort_index(level='ID',axis=1,inplace=True)
    
    为了得到要解析的唯一列名的元组列表,我需要columns.values,然后在计算后求助

    for id,loc,dir in df.columns.values:
        df[(id,loc,'tot')]=(df[(id,loc,'x')]**2+df[(id,loc,'y')]**2)**.5
    df.sort_index(level='ID',axis=1,inplace=True)
    

    由于这是基本列计算,我认为这种方法会很有效。

    排序索引有一个参数
    默认为0,这意味着按索引排序。您需要
    axis=1
    对列进行排序。谢谢。那很好用。这就解决了问题1。仍然不确定如何解析数据帧。