我正在使用 pandas 和 uproot 从 .root 文件中读取数据,我得到了如下表:
上述表格是用以下代码制作的:
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 的数组。
如果有人能给我任何提示、建议和/或建议,我将不胜感激。
最佳答案
我制作了一些模拟数据,因为您没有以任何简单的格式提供您的数据。我想这就是您要找的。p>
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/