我使用pandas和Outlot从.root文件读取数据,得到如下表:
上述表格由以下代码组成:
fname = 'ZZ4lAnalysis_VBFH.root'
key = 'ZZTree/candTree'
ttree = uproot.open(fname)[key]
branches = ['Z1Flav', 'Z2Flav', 'nCleanedJetsPt30', 'LepPt', 'LepLepId']
df = ttree.pandas.df(branches, flatten=False)
我需要在LepPt中找到最大值,一旦找到最大值,我还需要检索该最大值的lepid。 我很容易找到最大值:
Pt_l1 = [max(i) for i in df.LepPt]
这样我得到一个包含所有最大值的数组。但是,我必须根据lepid来分离这些值。所以我需要一个最大LepPt和| lepid |=11的数组,以及一个最大LepPt和| lepid |=13的数组
如果有人能给我任何提示、建议和/或建议,我将不胜感激
您可以为此使用^{} 接口
uproot
的一个依赖项,它允许您使用大小不规则的数组为此,您需要稍微更改加载数据的方式,但它允许您使用与普通} :
numpy
数组相同的方法,即^{然后,这只是一个普通的
numpy
数组,如果需要,可以将其分配给pandas
数据帧的一列。它应该具有正确的维度和顺序。它还应该比使用内置Python函数更快请注意,键是bytestring,而不是普通字符串,如果存在没有轻子的事件,则必须执行一些额外的步骤(在这种情况下,
flatten
将忽略这些空事件,从而破坏对齐)或者,也可以在以后转换列:
如果以后不再需要列,则前者会更快,否则后者可能更好
我做了一些模拟数据,因为你没有提供任何简单的格式。我想这就是你要找的
返回:
相关问题 更多 >
编程相关推荐