如何编写一个对数据帧进行多重过滤的函数?

时间:2019-10-28 16:19:30

标签: python pandas dataframe

我们有一个包含dtype四个功能的数据框; num,num,object和float。

我想在这种情况下过滤数据:
1. f ['g'] = <53
2. f ['h'] minmax(1,67)..该值应介于用户指定的值之间。
3. f ['k] =='y'
4.f ['l'] minmax(22,77)..该值应介于用户指定的值之间。

我想编写一个名为“ Datafilter”的函数,该函数可以进行多次过滤,而且我们应该能够根据将来的需求添加过滤器并更改条件。

这是一个数据框。

f= pd.DataFrame({'g':[1,2,3,45,33,57,23,53,56,79],   
'h':[12,344,5,78,98,95,43,56,32,23],
'k':['y','y','n','y','n','n','y','n','y','n'],
'l':[1.0,2.0,22.0,244.0,43.0,34.0,78.0,5.0,77.0,97.0]})

我是一个初学者,所以我一次可以应用一个过滤器。

>>>[IN] t=f.copy()

>>>[IN] t=t[ t['g']<= 53]

>>>[IN] t=t[t['h'].between(12,98) & t['l'].between(2.0,78.0)]

>>>[IN] t=t[t['k']=='n']

>>>[IN] print(t)

>>>[OT] 

    g   h   k   l
4   33  98  n   43.0
7   53  56  n   5.0

该功能应该是通用的,即可以重用,并且将来也应该能够处理其他过滤器。

2 个答案:

答案 0 :(得分:1)

就像

一样,只需使用&运算符一次应用所有过滤器

t=t[(t['h'].between(12,98)) & (t['l'].between(2.0,78.0))]

您必须将每个过滤器放在圆括号中,否则会出现错误。

答案 1 :(得分:0)

您可以简单地执行以下操作。

from typing import *
import pandas as pd

f= pd.DataFrame({'g':[1,2,3,45,33,57,23,53,56,79, 12],   
'h':[12,344,5,78,98,95,43,56,32,23, 33],
'k':['y','y','n','y','n','n','y','n','y','n', 'y'],
'l':[1.0,2.0,22.0,244.0,43.0,34.0,78.0,5.0,77.0,97.0,66]})

def Datafilter(df, h_minmax : List[int], l_minmax : List[int]) -> pd.DataFrame:
    return df[(df["g"] <= 53) & (df["h"].between(*h_minmax)) & (df["l"].between(*l_minmax)) & (df["k"] == "y")]

print(Datafilter(f, [1,67], [22,77]))

那会给你。

     g  h   k   l
10  12  33  y   66
``