【问题标题】:Using a MultiIndex value in a boolean selection (while setting)在布尔选择中使用 MultiIndex 值(设置时)
【发布时间】:2014-08-07 08:16:19
【问题描述】:

这里有一个类似的问题:Pandas using row labels in boolean indexing

但是那个使用一个简单的索引,我不知道如何将它推广到 MultiIndex:

df = DataFrame( { 'ssn' : [  489,  489,  220,  220 ],
                  'year': [ 2009, 2010, 2009, 2010 ],
                  'tax' : [  300,  600,  800,  900 ],    
                  'flag': [    0,    0,    0,    0 ] } )

df.set_index( ['ssn','year'], inplace=True )

半解决方案:

df.flag[ (df.year ==2010) & (df.tax<700) ] = 9(在 set_index 中 drop=False 时有效)

df.flag[ (df.index==2010) & (df.tax<700) ] = 9(适用于简单索引)

我已经尝试了几件事,但我就是不知道如何从简单索引泛化到多。例如。 df.index.year=2010 和其他 20 种猜测...

【问题讨论】:

    标签: pandas


    【解决方案1】:

    您可以使用index.get_level_values(),例如

    df.flag[(df.index.get_level_values('year') == 2010) & (df.tax < 700)] = 9
    

    【讨论】:

    • 不使用链索引(总是一个好主意!),这样做:df.loc[(df.index.get_level_values('year') == 2010) &amp; (df.tax &lt; 700),'flag'] = 9。在 0.15.0/master 中,这将起作用:df.loc[df.index.isin([2010],level='year') &amp; (df.tax&lt;700),'flag'] = 9
    • 谢谢杰夫,我还在努力理解链索引的事情。
    猜你喜欢
    • 2021-10-11
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2013-02-08
    • 2015-05-30
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多