python - 在 Pandas 中检索数据

标签 python pandas physics uproot

我正在使用 pandas 和 uproot 从 .root 文件中读取数据,我得到了如下表:

enter image description here

上述表格是用以下代码制作的:

fname = 'ZZ4lAnalysis_VBFH.root' 
key = 'ZZTree/candTree'
ttree = uproot.open(fname)[key]
branches = ['Z1Flav', 'Z2Flav', 'nCleanedJetsPt30', 'LepPt', 'LepLepId'] 
df = ttree.pandas.df(branches, flatten=False)

我需要在 LepPt 中找到最大值,一旦找到最大值,我还需要检索该最大值的 LepLepId。 我很容易找到最大值:

Pt_l1 = [max(i) for i in df.LepPt]

通过这种方式,我得到了一个包含所有最大值的数组。但是,我必须根据 LepLepId 将这些值分开。所以我需要一个具有最大 LepPt 和 |LepLepId|=11 的数组,以及一个具有最大 LepPt 和 |LepLepId|=13 的数组。

如果有人能给我任何提示、建议和/或建议,我将不胜感激。

最佳答案

我制作了一些模拟数据,因为您没有以任何简单的格式提供您的数据。我想这就是您要找的。

import pandas as pd

df = pd.DataFrame.from_records(
    [   [[1,2,3], [4,5,6]],
        [[4,6,5], [7,8,9]]
    ],
    columns=['LepPt', 'LepLepld']
)

df['max_LepPt'] = [max(i) for i in df.LepPt]

def f(row):
    # get index position within list
    pos = row['LepPt'].index(row['max_LepPt']).tolist()
    return row['LepLepld'][pos]

df['same_index_LepLepld'] = df.apply(lambda x: f(x), axis=1)

返回:

    LepPt       LepLepld    max_LepPt   same_index_LepLepld
0   [1, 2, 3]   [4, 5, 6]   3           6
1   [4, 6, 5]   [7, 8, 9]   6           8

关于python - 在 Pandas 中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60103825/

相关文章:

python - wxPython 嵌套面板和 Sizer

python - 将 python 列表导出到 Excel 列

python - 可视化决策树: IndexError: list index out of range

python - 如何忽略 pandas assert frame equal 的索引比较

ios - 为什么我的动态物理体能够插入我的静态物理体?在 swift

math - 给定质量周围任意位置的任意推进器计算偏移推进器位置的推力

python - 如何使用 py2neo 声明唯一约束

python - 如何检查python中的时间段内是否包含任何假期

python - Pandas 映射到新列 SettingWithCopyWarning

math - 实时计算碰撞——处理时间延迟