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的灵活性