当pandas DataFrame具有分层索引时,选择一个单元格

时间:2016-02-24 19:55:40

标签: python pandas

我希望能够做到

dat.loc['label_row1', 'label_row2', 'label_col']

但是,它不起作用并且需要

dat.loc['label_row1', 'label_row2'].loc['label_col']

对我而言,这是不直观的,因为当没有分层索引时,我可以选择一个单元格

dat.loc['label_row', 'label_col']

任何人都可以解释推理或建议一种记住这个怪癖的方法吗?

示例:

import pandas as pd
from pandas_datareader import wb

dat = wb.download(
    indicator=['BX.KLT.DINV.WD.GD.ZS'],
    country='CN', start=2005, end=2011)
dat.loc["China", "2003"].loc["BX.KLT.DINV.WD.GD.ZS"]

1 个答案:

答案 0 :(得分:1)

如果您的索引是第一个排序,您可以选择所有国家和2009年:

dat.sort_index().loc[(slice(None), '2009'), :]
              BX.KLT.DINV.WD.GD.ZS
country year                      
China   2009              2.590357

以下是文档中indexing with hierarchical data的链接。

因为你的索引是一个MultiIndex是一个元组,你的.loc索引也需要是一个元组。请注意以下两种方法之间的区别。一个返回一个系列,另一个返回一个数据帧:

>>> dat.sort_index().loc[('China', '2009'), :]
BX.KLT.DINV.WD.GD.ZS    2.590357
Name: (China, 2009), dtype: float64

>>> dat.sort_index().loc[[('China', '2009')], :]
              BX.KLT.DINV.WD.GD.ZS
country year                      
China   2009              2.590357