这里有一个类似的问题: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个猜测...
答案 0 :(得分:3)
您可以使用index.get_level_values()
,例如
df.flag[(df.index.get_level_values('year') == 2010) & (df.tax < 700)] = 9