通过如下所示的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
函数)?
答案 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