繁体   English   中英

如何根据另一个 dataframe 的条件过滤一个 dataframe 中列的特定值?

[英]How do you filter on specific values of a column in one dataframe based on conditions of another dataframe?

我有两个看起来像这样的数据框:

#df1
id   |   count    |  mindate
x         3            01/01/2020
y         4            01/02/2019
z         5            01/03/2019
#df2
id   |   date 
x         01/01/2019   
x         01/02/2019      
x         01/01/2020     
y         01/02/2018
y         01/03/2019
y         01/04/2020
z         01/04/2019
z         01/05/2020

我想做的是,如果一个 id 的计数小于 4,那么我想将该 id 的日期保持在 2019 年之后。如果一个 id 的计数大于或等于 4一个 id,那么我只想保持 id 的日期超过其 mindate 值。 所以最终的 dataframe 应该是这样的:

id   |   date 
x         01/01/2019   
x         01/02/2019      
x         01/01/2020     
y         01/03/2019
y         01/04/2020
z         01/04/2019
z         01/05/2020

我已经合并了这两个数据框,但我不确定在那之后该怎么做。

merge dataframe df2df1id ,然后使用np.where创建 boolean 掩码从df2过滤行

s = df2.merge(df1, on='id', how='left', sort=False)
m = np.where(s['count'] < 4, s['date'].dt.year >= 2019, s['date'] > s['mindate'])

>>> df2[m]

  id       date
0  x 2019-01-01
1  x 2019-01-02
2  x 2020-01-01
4  y 2019-01-03
5  y 2020-01-04
6  z 2019-01-04
7  z 2020-01-05

PS:在使用此方法之前,您需要将df1df2中的日期列解析为datetime类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM