簡體   English   中英

熊貓根據日期范圍和另一列過濾數據框

[英]Pandas filter dataframe based on date range and another column

我有一個名為df1pandas數據df1並且想根據數據grp_id df2條件過濾該數據grp_id ,對於特定的grp_id ,我只希望從df2 year列開始的日期直到最近的年份(2016),如圖所示。 df3 這只是我的數據的一個子集,其中我至少有10個唯一的grp_id到具有不同起始年的子集。

DF1

       db_id           cert_status grp_id       year   cap prov
130   IX-011  not-certified member     SD 2004-01-01  30.0   KB
131   IX-011  not-certified member     SD 2005-01-01  30.0   KB
132   IX-011  not-certified member     SD 2006-01-01  30.0   KB
133   IX-011  not-certified member     SD 2007-01-01  30.0   KB
134   IX-011  not-certified member     SD 2008-01-01  30.0   KB
135   IX-011  not-certified member     SD 2009-01-01  30.0   KB
136   IX-011  not-certified member     SD 2010-01-01  30.0   KB
137   IX-011  not-certified member     SD 2011-01-01  30.0   KB
138   IX-011  not-certified member     SD 2012-01-01  30.0   KB
139   IX-011  not-certified member     SD 2013-01-01  30.0   KB
140   IX-011  not-certified member     SD 2014-01-01  30.0   KB
141   IX-011  not-certified member     SD 2015-01-01  30.0   KB
142   IX-011  not-certified member     SD 2016-01-01  30.0   KB
208   IX-017  not-certified member     CG 2004-01-01  30.0   KB
209   IX-017  not-certified member     CG 2005-01-01  30.0   KB
210   IX-017  not-certified member     CG 2006-01-01  30.0   KB
211   IX-017  not-certified member     CG 2007-01-01  30.0   KB
212   IX-017  not-certified member     CG 2008-01-01  30.0   KB
213   IX-017  not-certified member     CG 2009-01-01  30.0   KB
214   IX-017  not-certified member     CG 2010-01-01  30.0   KB
215   IX-017  not-certified member     CG 2011-01-01  30.0   KB
216   IX-017  not-certified member     CG 2012-01-01  30.0   KB
217   IX-017  not-certified member     CG 2013-01-01  80.0   KB
218   IX-017  not-certified member     CG 2014-01-01  30.0   KB
219   IX-017  not-certified member     CG 2015-01-01  30.0   KB
220   IX-017  not-certified member     CG 2016-01-01  30.0   KB

DF2

   grp_id member       year
4     SD       Y 2007-01-01
6     CG       Y 2011-01-01

DF3

       db_id           cert_status grp_id       year   cap prov
133   IX-011  not-certified member     SD 2007-01-01  30.0   KB
134   IX-011  not-certified member     SD 2008-01-01  30.0   KB
135   IX-011  not-certified member     SD 2009-01-01  30.0   KB
136   IX-011  not-certified member     SD 2010-01-01  30.0   KB
137   IX-011  not-certified member     SD 2011-01-01  30.0   KB
138   IX-011  not-certified member     SD 2012-01-01  30.0   KB
139   IX-011  not-certified member     SD 2013-01-01  30.0   KB
140   IX-011  not-certified member     SD 2014-01-01  30.0   KB
141   IX-011  not-certified member     SD 2015-01-01  30.0   KB
142   IX-011  not-certified member     SD 2016-01-01  30.0   KB
215   IX-017  not-certified member     CG 2011-01-01  30.0   KB
216   IX-017  not-certified member     CG 2012-01-01  30.0   KB
217   IX-017  not-certified member     CG 2013-01-01  80.0   KB
218   IX-017  not-certified member     CG 2014-01-01  30.0   KB
219   IX-017  not-certified member     CG 2015-01-01  30.0   KB
220   IX-017  not-certified member     CG 2016-01-01  30.0   KB

這樣做最簡單,最快的方法是什么?

嘗試使用帶有query merge來過濾:

df1.merge(df2, on = ['grp_id'], suffixes=('','_2'), right_index=True)\
   .query('year >= year_2')[df1.columns]

輸出:

      db_id           cert_status grp_id        year   cap prov
133  IX-011  not-certified member     SD  2007-01-01  30.0   KB
134  IX-011  not-certified member     SD  2008-01-01  30.0   KB
135  IX-011  not-certified member     SD  2009-01-01  30.0   KB
136  IX-011  not-certified member     SD  2010-01-01  30.0   KB
137  IX-011  not-certified member     SD  2011-01-01  30.0   KB
138  IX-011  not-certified member     SD  2012-01-01  30.0   KB
139  IX-011  not-certified member     SD  2013-01-01  30.0   KB
140  IX-011  not-certified member     SD  2014-01-01  30.0   KB
141  IX-011  not-certified member     SD  2015-01-01  30.0   KB
142  IX-011  not-certified member     SD  2016-01-01  30.0   KB
215  IX-017  not-certified member     CG  2011-01-01  30.0   KB
216  IX-017  not-certified member     CG  2012-01-01  30.0   KB
217  IX-017  not-certified member     CG  2013-01-01  80.0   KB
218  IX-017  not-certified member     CG  2014-01-01  30.0   KB
219  IX-017  not-certified member     CG  2015-01-01  30.0   KB
220  IX-017  not-certified member     CG  2016-01-01  30.0   KB

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM