对数据帧嵌套数组应用条件

2024-05-12 19:04:11 发布

您现在位置:Python中文网/ 问答频道 /正文

从如下数据帧:

我想应用一个过滤器,这样它只显示包含数组的行,数组中的所有元素10 > Muon_pt > 20范围内,或者一些元素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()

获取:

有没有任何方法可以应用这个过滤器而不在嵌套数组中循环(即替换anyCutallCut函数)


Tags: lambda函数pt元素过滤器dfreturn数组
1条回答
网友
1楼 · 发布于 2024-05-12 19:04:11

这里可以使用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

相关问题 更多 >