大Pandas一级多指标值的检索

2024-06-16 12:08:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多重索引

ind = pd.MultiIndex.from_tuples([('A', 0), ('A', 1), ('B', 1), ('B', 2)], names=['Letters', 'Numbers'])

像那样的厕所

^{pr2}$

如果给定第一级的值,如何检索第二级的所有值?也就是说,给定A,我想得到[0,1],而给定B,我想得到[1,2]。在

我唯一能想到的办法是

ind.get_level_values(1)[ind.get_level_values(0) == 'B']

但这看起来不太好,我希望有一个更优雅的表达。有?在


Tags: fromgetnameslevelpdvaluesnumbersind
1条回答
网友
1楼 · 发布于 2024-06-16 12:08:05

最简单和最快的是使用列表理解:

a = [x[1] for x in ind.tolist() if x[0] == 'A']
print (a)

[0, 1]

另一个可能的解决方案是使用^{}创建助手df

^{pr2}$

但在我看来,你的解决方案很不错(对按级别选择的名称有点更改):

a = ind.get_level_values('Numbers')[ind.get_level_values('Letters') == 'B'].tolist()
print (a)
[1, 2]

计时

In [197]: %timeit ([x[1] for x in ind.tolist() if x[0] == 'A'])
100000 loops, best of 3: 2.14 µs per loop

In [199]: %timeit ind.get_level_values('Numbers')[ind.get_level_values('Letters') == 'B'].tolist()
1000 loops, best of 3: 377 µs per loop


In [200]: %%timeit
     ...: df = pd.DataFrame(ind.tolist(), columns=['a','b'])
     ...: df.loc[df['a'] == 'A', 'b'].tolist()
     ...: 
1000 loops, best of 3: 1.06 ms per loop

相关问题 更多 >