![](/img/trans.png)
[英]Get specific index from MultiIndex of Pandas data frame as list
[英]Get data from Pandas multiIndex
我正在使用Pandas和uproot从 .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.DataFrame
和flatten=True
( ttree.pandas.df
默认值)时,带有flatten=True
awkward.topandas
等效于ttree.pandas.df
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.