我的意见:
mydata = (pd.DataFrame({'xyz':['Label','NG-ICV','NG-ICV','NG-ICV','ICV','ICV','ICV','NG-ICV','NG-ICV','Label',],
'foo':['Label','Label','Label','Label','Label','Label','Label','Label','Label','Label'],
'bar':['Label','Label','Label','Label','NG-ICV','NG-ICV','ICV','ICV','NG-ICV','NG-ICV']})) 我的必要代码计算两种模式之间的比率,并找出哪一列是最大的比率:
patNG = "NG-ICV"
pat = "ICV"
x=mydata.apply(lambda x: x.str.contains(patNG, regex=True).sum(), axis=0)
y=mydata.apply(lambda x: x.str.contains(pat, regex=True).sum(), axis=0)
z=x/y
z=z.dropna()
mask=z.index.values.tolist()现在,我希望在mask的两个条件列名中选择具有索引的行,并且只选择patNG和pat为True的行(其中的行值等于'ICV‘或’NG‘)。例如,对于列xyz,我希望如下所示:
xyz
4 NG-ICV
5 NG-ICCV
6 ICV
7 ICV
8 NG-ICV
9 NG-ICV我的代码:
mydata.loc[ :,[mask[0] in i for i in mydata.columns] ]在这里,如何再添加一个条件,使行的值也等于我的两个模式(‘pat’和'patNG')?
我必须使用正则表达式和模式,因为我的数据不是像ICV这样的标签,而是与其他标签的长字符串。
发布于 2021-12-13 14:13:31
按照您的逻辑,您应该在求和之前保留模式的初始检测。然后在检测到的列上应用一个掩码来选择您的行:
X = mydata.apply(lambda x: x.str.contains(patNG, regex=True), axis=0)
Y = mydata.apply(lambda x: x.str.contains(pat, regex=True), axis=0)
x = X.sum()
y = Y.sum()
z = (x/y).dropna()
mask = z.index.values.tolist()
mydata.loc[(X|Y)[mask].all(1)]产出:
xyz foo bar
4 ICV Label NG-ICV
5 ICV Label NG-ICV
6 ICV Label ICV
7 NG-ICV Label ICV
8 NG-ICV Label NG-ICVhttps://stackoverflow.com/questions/70335919
复制相似问题