【问题标题】:Logical MultiIndexing in PandasPandas 中的逻辑多索引
【发布时间】:2016-10-30 14:58:33
【问题描述】:

有没有办法为索引One 提取B 的所有值,其中C 大于零?所以我想提取值-0.22-1.21

import numpy as np
import pandas as pd
arrays =[np.array(['One','One','One','Two','Two','Two']),np.array(['A','B','C','A','B','C'])]
df = pd.DataFrame(np.random.randn(6,5),index=arrays)

df
               0         1         2         3         4
One     A -0.908680  0.031505 -0.087090 -0.039527  0.221196
        B  1.010757  1.272553 -0.220535 -1.216996 -0.122108
        C -0.781714 -1.830215  0.584311  0.010987 -0.050355
Two     A -0.331269  0.410596  0.569802  1.455710  0.377796
        B  0.079330 -2.538031 -1.665904  0.477257  0.500805
        C -0.388749  2.188289 -1.465292  0.594870 -0.031983

【问题讨论】:

    标签: python pandas indexing dataframe multi-index


    【解决方案1】:

    您可以创建mask,然后通过mask 使用loc

    import numpy as np
    import pandas as pd
    np.random.seed(1)
    arrays = [np.array(['One','One','One','Two','Two','Two']),
              np.array(['A','B','C','A','B','C'])]
    df = pd.DataFrame(np.random.randn(6,5),index=arrays)
    print (df)
                  0         1         2         3         4
    One A  1.624345 -0.611756 -0.528172 -1.072969  0.865408
        B -2.301539  1.744812 -0.761207  0.319039 -0.249370
        C  1.462108 -2.060141 -0.322417 -0.384054  1.133769
    Two A -1.099891 -0.172428 -0.877858  0.042214  0.582815
        B -1.100619  1.144724  0.901591  0.502494  0.900856
        C -0.683728 -0.122890 -0.935769 -0.267888  0.530355
    
    idx = pd.IndexSlice
    mask = (df.loc[idx['One', 'C'],:]) > 0
    
    print (mask)
    0     True
    1    False
    2    False
    3    False
    4     True
    Name: (One, C), dtype: bool
    
    print (df.loc[idx['One', 'B'], mask])
    0   -2.301539
    4   -0.249370
    Name: (One, B), dtype: float64
    

    【讨论】:

      猜你喜欢
      • 2014-02-20
      • 2015-06-06
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多