【问题标题】:Filtering rows with MultiIndex columns过滤具有 MultiIndex 列的行
【发布时间】:2012-11-27 09:54:04
【问题描述】:

在创建具有 MultiIndex 列的 DataFrame 时,似乎无法使用 df[df["AA"]>0.0] 之类的语法来选择/过滤行。 例如:

import pandas as pd
import numpy as np

dates = np.asarray(pd.date_range('1/1/2000', periods=8))
_metaInfo = pd.MultiIndex.from_tuples([('AA', '[m]'), ('BB', '[m]'), ('CC', '[s]'), ('DD', '[s]')], names=['parameter','unit'])

df = pd.DataFrame(randn(8, 4), index=dates, columns=_metaInfo)
print df[df['AA']>0.0]

df["AA"]>0.0 的结果是一个索引 DataFrame iso a Timeseries。这可能会导致崩溃。

当使用相同的元信息作为行的索引时,情况就不同了:

df1 = pandas.DataFrame(np.random.randn(4, 6), index=_metaInfo)
print df1[df1["AA"]>0.0]

产生:

[ 1.13268106 -0.06887761  0.68535054  2.49431163 -0.29349413  0.34772553]

AA 行中大于零的元素。这仅给出 AA 行的值,而不给出 DataFrame 的其他列的值。

有解决方法吗?我是否在尝试做不该做的事情?

【问题讨论】:

    标签: pandas


    【解决方案1】:

    您可以仅选择“AA”列并将其用作整个 df 的过滤器。

    喜欢:

    df[df[('AA','[m]')]>0.0]
    
    parameter         AA        BB        CC        DD
    unit             [m]       [m]       [s]       [s]
    2000-01-01  0.600748 -1.163793 -0.982248 -0.397988
    2000-01-03  1.045428  0.365353  0.049152  1.902942
    2000-01-06  0.891202  0.021921  1.215515 -1.624741
    2000-01-08  0.999217 -1.110213  0.257718 -0.096018
    

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 2012-04-25
      • 1970-01-01
      • 2018-08-20
      • 2017-08-25
      • 2019-12-11
      • 2021-10-04
      • 1970-01-01
      • 2020-05-31
      相关资源
      最近更新 更多