【问题标题】:Slicing MultiIndexed DataFrame in pandas在 pandas 中切片 MultiIndexed DataFrame
【发布时间】:2020-12-08 20:45:22
【问题描述】:

我有以下DataFrame 命名为pop:

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

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

【问题讨论】:

  • 应该提到,它是具有多个索引级别的数据框:分别为州名和年份

标签: python pandas jupyter-notebook ipython


【解决方案1】:

我想这样指定列名,可以通过添加更多&来进一步扩展

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

【讨论】:

  • 如何解读'level_0''level_1'
  • 这些是你的列名
【解决方案2】:

TLDR

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

在这种情况下是:

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

下面是更详细的版本。


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

创建示例数据框

使用the Pandas docs

arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
          np.array(['one', 'two', 'one', 'two', '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'), :]

为了符号一致性,您可以在切片的第二个元素上使用[]

df.loc[(['qux','foo'], ['one']), :]

这将产生相同的结果。

这是:

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


This 也可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 1970-01-01
    • 2013-09-01
    • 2017-03-28
    • 2012-08-06
    • 2017-08-22
    • 2017-12-11
    • 2017-12-15
    • 2021-11-22
    相关资源
    最近更新 更多