簡體   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