Python / Pandas - 根据条件过滤行

时间:2017-08-24 04:27:56

标签: python pandas

我有这个数据框:

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  anual         321076.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 
...

我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

你在Pandas中这样做的正如你用英语描述的那样:

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 :(得分: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]: