python - 从多个索引 Pandas 的 DataFrame 访问值

标签 python pandas dataframe

来自书中的以下数据框 Python Data Science Handbook , 我正在尝试列出

import pandas as pd
import numpy as np


index = pd.MultiIndex.from_product([[2013, 2014], [1, 2]], names=['year', 'visit'])
columns = pd.MultiIndex.from_product([['Bob', 'Guido', 'Sue'], ['HR', 'Temp']], names=['subject', 'type'])

# mock some data
data = np.round(np.random.randn(4, 6), 1)
data[:, ::2] *= 10
data += 37

# create the DataFrame
health_data = pd.DataFrame(data, index=index, columns=columns)

我可以访问不同的行和列:

print( health_data['Guido'])
type          HR  Temp
year visit            
2013 1      32.0  36.4
     2      47.0  37.8
2014 1      38.0  36.0
     2      47.0  37.2

print(health_data)
subject      Bob       Guido         Sue      
type          HR  Temp    HR  Temp    HR  Temp
year visit                                    
2013 1      26.0  35.6  44.0  36.8  32.0  37.0
     2      34.0  34.9  44.0  37.2  46.0  35.5
2014 1      46.0  36.8  45.0  37.9  26.0  37.3
     2      41.0  37.4  30.0  37.1  23.0  37.4

print(health_data.index)
MultiIndex(levels=[[2013, 2014], [1, 2]],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
           names=['year', 'visit'])

print(health_data.loc[2013])
subject   Bob       Guido         Sue      
type       HR  Temp    HR  Temp    HR  Temp
visit                                      
1        26.0  35.6  44.0  36.8  32.0  37.0
2        34.0  34.9  44.0  37.2  46.0  35.5

print(health_data.loc[2013, 1])
subject  type
Bob      HR      26.0
         Temp    35.6
Guido    HR      44.0
         Temp    36.8
Sue      HR      32.0
         Temp    37.0
Name: (2013, 1), dtype: float64

但是,我无法通过访问来显示数据框,即

health_data[:, 1]

自从我收到此错误

TypeError: '(slice(None, None, None), 1)' is an invalid key

我该怎么做?

最佳答案

对于多索引,xs是一个有用的定位器:

health_data.xs(1, level='visit')

这将返回数据帧的 View ,其中 visit1:

subject   Bob       Guido         Sue      
type       HR  Temp    HR  Temp    HR  Temp
year                                       
2013     25.0  37.2  35.0  37.7  21.0  37.8
2014     31.0  35.3  42.0  37.9  38.0  37.2

如果您仍希望显示visit,请使用drop_level=False:

health_data.xs(1, level='visit', drop_level=False)

    subject      Bob       Guido         Sue      
type          HR  Temp    HR  Temp    HR  Temp
year visit                                    
2013 1      25.0  37.2  35.0  37.7  21.0  37.8
2014 1      31.0  35.3  42.0  37.9  38.0  37.2

关于python - 从多个索引 Pandas 的 DataFrame 访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593281/

相关文章:

python - 如何在没有包的情况下在python中创建makefile

python - 为什么在引发错误时继续不起作用

python - Pandas 选择所有没有 NaN 的列

pandas - 使用多索引创建空的 pandas 数据框

postgresql - 使用scala将多个数据帧插入函数中的postgres表

python - 为什么 pytest 在仅运行一部分测试时不加载 conftest.py?

java - 通过 Jython 使用 .pyc 文件

python - Pandas DataFrame - 删除特定列中与前一行具有相同值的行

pandas - 获取从与 Pandas 数据框中的当前行相同的值开始的行列表

r - 过滤 R data.frames 时更新因子水平