![](/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.