Python 3.x 在Pandas中解析多级头

Python 3.x 在Pandas中解析多级头,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,尝试我的手,多层次索引。显示了输入和输出的示例。我试着换位,一部分一部分地阅读,不确定我要去哪里: 输入: import pandas as pd import numpy as np df = pd.DataFrame(index=['2016-11-21', '2016-11-22', '2016-11-23', '2016-11-24', '2016-11-25'], columns=pd.MultiIndex.from_product([list('A

尝试我的手,多层次索引。显示了输入和输出的示例。我试着换位,一部分一部分地阅读,不确定我要去哪里:

输入:

import pandas as pd
import numpy as np
df = pd.DataFrame(index=['2016-11-21', '2016-11-22', '2016-11-23', '2016-11-24', '2016-11-25'],
                  columns=pd.MultiIndex.from_product([list('AB'), list('ab')]),
                  data=np.array([[2,3,5,6,6], [1,4,2,3,3], [3,1,1,1,0], [0,0,6,5,2]]).T)
print (df)
            A     B   
            a  b  a  b
2016-11-21  2  1  3  0
2016-11-22  3  4  1  0
2016-11-23  5  2  1  6
2016-11-24  6  3  1  5
2016-11-25  6  3  0  2
期望输出: 我需要在a列和B列中获得“2016-11-22”的值


要匹配您的输出,您可以将
df.xs
unstack

df.xs('a',axis=1,level=1,drop_level=False).loc['2016-11-22'].unstack()

但是,如果您对单个级别和索引感兴趣,也可以尝试:

df.xs('a',axis=1,level=1).loc['2016-11-22']

A    3
B    1
Name: 2016-11-22, dtype: int64

要匹配您的输出,您可以将
df.xs
unstack

df.xs('a',axis=1,level=1,drop_level=False).loc['2016-11-22'].unstack()

但是,如果您对单个级别和索引感兴趣,也可以尝试:

df.xs('a',axis=1,level=1).loc['2016-11-22']

A    3
B    1
Name: 2016-11-22, dtype: int64

尝试
过滤器
.loc

df.filter(like='2016-11-22',axis=0).loc[:,df.columns.get_level_values(1).isin(['a'])].stack(0)


          a
2016-11-22 A  3
           B  1

尝试
过滤器
.loc

df.filter(like='2016-11-22',axis=0).loc[:,df.columns.get_level_values(1).isin(['a'])].stack(0)


          a
2016-11-22 A  3
           B  1

我使用日期索引查找行,然后使用元组对选择列,元组对匹配所有级别0列的多索引,级别1列仅使用“a”

df = pd.DataFrame(index=['2016-11-21', '2016-11-22', '2016-11-23', '2016-11-24', '2016-11-25'],
              columns=pd.MultiIndex.from_product([list('AB'), list('ab')]),
              data=np.array([[2,3,5,6,6], [1,4,2,3,3], [3,1,1,1,0], [0,0,6,5,2]]).T)

 columns=df.columns.levels[0]
 print(df.loc['2016-11-22',(columns,'a')])

 output:
 A  a    3
 B  a    1
 Name: 2016-11-22, dtype: int32

我使用日期索引查找行,然后使用元组对选择列,元组对匹配所有级别0列的多索引,级别1列仅使用“a”

df = pd.DataFrame(index=['2016-11-21', '2016-11-22', '2016-11-23', '2016-11-24', '2016-11-25'],
              columns=pd.MultiIndex.from_product([list('AB'), list('ab')]),
              data=np.array([[2,3,5,6,6], [1,4,2,3,3], [3,1,1,1,0], [0,0,6,5,2]]).T)

 columns=df.columns.levels[0]
 print(df.loc['2016-11-22',(columns,'a')])

 output:
 A  a    3
 B  a    1
 Name: 2016-11-22, dtype: int32

很好的一个,第一次实际看到使用中的
xs
,我不经常使用多索引,但当我这样做时,我惊讶于APInice one的灵活性,第一次实际看到使用中的
xs
,我不经常使用多索引,但当我这样做时,我惊讶于API的灵活性