我想基于多个条件获取数据帧的子集,并且我将其传递给变量的条件数量。
我在多个条件下都看到了类似的答案(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,,,,,
第一列是文件名。其他列是有关该文件表示的传输器的数据。
我想创建此文件的子集,该子集表示单个晶体管,其定义为:(曲线类型,厚度,温度,编号)或单个芯片:(曲线类型,厚度,温度)。
这样我就可以导入它们并进行绘图/分析。
答案 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)