使用可变数量的条件选择列值等于某个值的行

时间:2019-05-07 18:18:18

标签: python pandas subset

我想基于多个条件获取数据帧的子集,并且我将其传递给变量的条件数量。

我在多个条件下都看到了类似的答案(Select rows from a DataFrame based on values in a column in pandas) ,但不允许传递更少的变量。

我尝试使用:c = None,c = True,c = all,但是它总是计算为false

def Subset (df, a=None, b=None, c=True): 
    temp=df.loc[(df['a'] == a) & (df['b'] == b) & (df['c'] == c)]

    return (temp)

如果我评估:

Subset=Subset(df=Table, a=350, b=300)

我得到一个空的数据框

同时使用以下功能:

def Try(df, a=None, b=None): 
    temp=df.loc[(df['a'] == a) & (df['b'] == b)]

    return (temp)

我得到一个包含10行的数据框。

为回答Yaakov Bressler的评论,我提供了更多信息: 我的数据框如下所示:

files,Names,Curve Type,Thickness,Temperature,Number,Iteration,leak,start,stop,Vth,F_E_M,on/off
Output [(1) _250-300-G21_]0.csv,250-300-G21,Output,250,300,G21,0,True,,,,,
Output [(1) _250-300-G22_]0.csv,250-300-G22,Output,250,300,G22,0,False,,,,,
Transfer lin [(1) _250-300-G21_;]0.csv,250-300-G21,Transfer lin,250,300,G21,0,True,,,,,

第一列是文件名。其他列是有关该文件表示的传输器的数据。

我想创建此文件的子集,该子集表示单个晶体管,其定义为:(曲线类型,厚度,温度,编号)或单个芯片:(曲线类型,厚度,温度)。

这样我就可以导入它们并进行绘图/分析。

2 个答案:

答案 0 :(得分:0)

好像您数据框的'c'列不是布尔值。尝试print(df['c'].dtype == 'bool')

此外,共享您的原始df和目标将有助于阐明您的问题。

也是,我不会像Subset=Subset(df=Table, a=350, b=300)

那样用函数命名对象

答案 1 :(得分:0)

最后,我这样做了:

    def Subset ( df, *arg, **kwargs):  
        ''' joins them in a query,
            TRANFROMS DATASET TO STR , and gives back subsett'''

        qry = ' & '.join(["{} == '{}'".format(key,value) for key,value in kwargs.items()])        
        df=df.astype(str)


        subset=df.query(qry)
        return (subset)