2017-08-24 68 views
1

过滤行我有这样的数据帧:的Python /大熊猫 - 按照标​​准

bal: 

      year id unit period Ativo Circulante Ativo Não-Circulante \ 
business_id                  
9564   2012 302 dsada anual  5964168.52   10976013.70 
9564   2011 303 dsada anual  5774707.15   10867868.13 
2361   2013 304 dsada anual  3652575.31   6608468.52 
2361   2012 305 dsada anual76.15   6027066.03 
2369   2013 306 dsada anual  3858137.49   9733126.02 
2369   2012 307 dsada anual   351373.66   9402830.89 
8104   2012 308 dsada anual  3503226.02   6267307.01 
... 

我希望它的方式,每个索引只有其去年的数据进行过滤。它看起来像这样:

   year id unit period Ativo Circulante Ativo Não-Circulante \ 
business_id                  
9564   2012 302 dsada anual  5964168.52   10976013.70 
2361   2013 304 dsada anual  3652575.31   6608468.52 
2369   2013 306 dsada anual  3858137.49   9733126.02 
8104   2012 308 dsada anual  3503226.02   6267307.01 
... 

我该怎么做?

回答

1

你做它在大熊猫正是你描述它的英文:

bal.sort_values('year').groupby(bal.index).last() 

#    year id unit period Ativo_Circulante Ativo_Não-Circulante 
#business_id                 
#2361   2012 307 dsada anual   351373.66   9402830.89 
#2369   2013 304 dsada anual  3652575.31   6608468.52 
#8104   2013 306 dsada anual  3858137.49   9733126.02 
#9564   2012 302 dsada anual  5964168.52   10976013.70 
1

或者,您可以不保持第一副本即

bal[~bal.index.duplicated(keep='first')] 

输出做布尔索引:

 
      year id unit period Ativo_Circulante Ativo_Não-Circulante 
business_id                 
9564   2012 302 dsada anual 5964168.52  10976013.70   
2361   2013 304 dsada anual 3652575.31  6608468.52   
2369   2013 306 dsada anual 3858137.49  9733126.02   
8104   2012 308 dsada anual 3503226.02  6267307.01   
In [576]: 

+1

可能有多个重复。而且,无论如何,DataFrame必须首先按年份排序。如果不是,任何行都可能是第一个。 – DyZ