这里有一个类似的问题: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
(如果drop=False在set_index中工作的话)
df.flag[ (df.index==2010) & (df.tax<700) ] = 9
(适用于一个简单的索引)
我尝试过几种方法,但是我不知道如何从简单的索引推广到多个索引。比如df.index.year=2010和其他20个猜测..。
发布于 2014-08-07 00:16:19
你可以使用index.get_level_values()
。
df.flag[(df.index.get_level_values('year') == 2010) & (df.tax < 700)] = 9
https://stackoverflow.com/questions/25172264
复制相似问题