我正在使用Outlot将ROOT.TTree转换为pandas.dataframe。数据帧的结构如下所示。请注意,“met”是一个条目级变量,“mu_cells_*”是一个子条目级变量
现在我想创建一个“met”的ROOT.TH1柱状图。我曾在根论坛中询问,这只能通过在dataframe上循环并对每个条目执行root.TH1.Fill()(不是子条目以避免多次计数)来完成,请参见link。我想问一下,最好的方法是什么
类似地,既然“mu_cells_e”必须在子条目上循环,我如何生成它的TH1
最好的
尤西
met mu_cells_e mu_cells_side mu_cells_tower
entry subentry
0 0 71755.648438 179.995682 -1 6
1 71755.648438 -308.388519 -1 7
2 71755.648438 15.558195 -1 8
3 71755.648438 252.033691 -1 6
4 71755.648438 459.172119 -1 7
... ... ... ... ...
7107 22 26328.087891 611.708374 1 4
23 26328.087891 -13.317616 1 6
24 26328.087891 12.681366 1 2
25 26328.087891 -4.776075 1 4
26 26328.087891 -17.860764 1 6
[173410 rows x 4 columns]
您需要首先提取一个序列进行进一步的计算,因为ROOT、boost直方图或任何其他工具都不知道熊猫子索引。可以这样做:
现在您可以使用TH1的
.FillN(len(mu_cells_side), mu_cells_side, ROOT.nullptr)
或boost直方图的fill或NumPy,因为此时它是一个普通数组(如果有人关心它是一个真正的np数组,请随意调用mu_cells_side = np.asarray(mu_cells_side)
,但我认为他们不会)。这将比尝试在Python中循环快得多拥有MWE将有助于建立类似的数据帧:
相关问题 更多 >
编程相关推荐