在熊猫中切片MultiIndexed DataFrame

问题描述

我有以下DataFrame名为pop:

California  2000    33871648
            2010    37253956
New York    2000    18976457
            2010    19378102
Texas       2000    20851820
            2010    25145561

我想打印出加利福尼亚和德克萨斯州的2010年值。每当我尝试pop[['California','Texas'],2010]时,我都会遇到错误'(['California',2010)' is an invalid key 那我该如何打印信息?

解决方法

TLDR

10M

在这种情况下为:

df.loc[(level_1_indices_list,level_2_indices_list),:]

下面是更详细的版本。


df.loc[(['California','Texas'],['2010']),:]

创建示例数据框

使用the Pandas docs

# import packages & set seed
import numpy as np
import pandas as pd
np.random.seed(42)

这看起来像:

enter image description here


使用多索引切片

使用arrays = [np.array(['bar','bar','baz','foo','qux','qux']),np.array(['one','two','one','two'])] s = pd.Series(np.random.randn(8),index=arrays) df = pd.DataFrame(np.random.randn(8,4),index=arrays) ,您可以执行以下操作:

df

为了实现符号一致性,您可以在切片的第二个元素上使用df.loc[(['qux','foo'],'one'),:]

[]

将产生相同的结果。

哪个是

enter image description here

(选择df.loc[(['qux',['one']),:] 等同于在'one'中选择2010df等同于选择['California','Texas']。基于此,我认为您可以将此处的步骤应用于您的数据。)


This可能也有帮助。

,

我希望通过指定列名来实现这一点,可以通过添加更多的&

df.loc[(df['level_0'].isin(['California','Texas'])) & (df['level_1'].isin(['2010']))]