繁体   English   中英

从 Pandas multiIndex 获取数据

[英]Get data from Pandas multiIndex

我正在使用Pandasuproot从 .root 文件中读取数据,我得到一个如下所示的表:

桌子

所以,从我的 .root 文件中,我得到了一些树的分支。

fname = 'ZZ4lAnalysis_VBFH.root' 
key = 'ZZTree/candTree'
ttree = uproot.open(fname)[key]
branches = ['nCleanedJets', 'JetPt', 'JetMass', 'JetPhi'] 
df = ttree.pandas.df(branches, entrystop=40306)

本质上,我必须为每个条目检索“JetPhi”数据,其中有超过 2 个子条目(或等效地,“nCleanedJets”等于或大于 2 的条目),计算“JetPhi”在前两个之间的差异子条目,然后为这些差异制作直方图。

我试图在互联网上查找并尝试了不同的可能性,但我没有找到任何有用的解决方案。 如果有人能给我任何提示、建议和/或建议,我将不胜感激。 我曾经用 C++ 编码,我是 python 的新手。

我曾经用 C++ 编码,所以我是 python 的新手,我仍然不掌握这门语言。

你可以在 Pandas 中做到这一点

df[df["nCleanedJets"] >= 2]

因为您有一列包含条目数。 df["nCleanedJets"] >= 2表达式返回一个Series的布尔值( True如果行传递, False如果行不通过),并传递一个Series由阵列或NumPy的阵列在方括号中的掩模的切片(返回布尔数组为True )。

您也可以在转换为 Pandas 之前在 Awkward Array 中执行此操作,如果您没有"nCleanedJets"列,这会更容易。

array = ttree.arrays(branches, entrystop=40306)
selected = array[array.counts >= 2]

awkward.topandas(selected, flatten=True)

在尴尬阵列掩蔽遵循相同的原理,但与数据结构,而不是平坦的Series或NumPy的阵列(每个元件array是记录与列表"nCleanedJets""JetPt""JetPhi""JetMass"字段和counts是每个列表的长度)。

outputtype=pandas.DataFrameflatten=Truettree.pandas.df默认值)时,带有flatten=True awkward.topandas等效于ttree.pandas.df

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM