在DataFrame嵌套数组上应用条件

时间:2019-11-25 19:27:48

标签: python pandas dataframe

通过如下所示的Pandas DataFrame:

我想应用一个过滤器,以便仅显示包含所有元素10 > Muon_pt > 20 一些元素 {1}}范围内的

我通过定义两个函数来做到这一点:

50 > Electron_pt > 100

然后应用它:

def anyCut(x, minn , maxx):
    for i in x:
        if i > minn and i < maxx:
            return True
    return False

def allCut(x, minn, maxx):

    for i in x:
        if i < minn or i > maxx:
            return False    
    return True

获取:

是否有任何方法可以应用此过滤器而不循环遍历嵌套数组(即替换minElectronPt = 50.0 maxElectronPt = 100.0 minMuonPt = 10 maxMuonPt = 20 df[ ( (df["nElectron"]>1) & (df["nMuon"]>1) ) & ( (df["Electron_charge"].apply(lambda x: all(x == -1))) & ( ( df["Electron_pt"].apply(lambda x: anyCut(x, minElectronPt, maxElectronPt)) ) | ( df["Muon_pt"].apply(lambda x: allCut(x, minMuonPt, maxMuonPt)) ) ) ) ].head() anyCut函数)?

1 个答案:

答案 0 :(得分:1)

在这里您可以使用Numpy数组并避免for循环,例如:

import numpy as np

def anyCut(x, minn , maxx):
    x_np=np.array(x)
    if (x_np > minn).all() and (x_np < maxx).all()
        return True
    return False

def allCut(x, minn, maxx):
    x_np=np.array(x)
    if (x_np > minn).all() or (x_np < maxx).all()
        return False  
    return True