2017-08-24 70 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