在布尔选择中使用MultiIndex值(设置时)

时间:2014-08-07 00:07:15

标签: pandas

这里有一个类似的问题: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个猜测...

1 个答案:

答案 0 :(得分:3)

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

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