我有一个多索引数据框:
score
id iso
0 AR 1.0203
BO 1.2303
CN 1.2402
NL 1.1202
SC 1.4552
1 AR 1.2004
BO 2.3030
CN 1.2039
NL 1.6043
SC 1.3949
从这个数据框架中,我想获得“id'”的所有分数。 = 0表示iso代码列表,例如:
['AR','CN','SC']
传递元组列表,我设法获得这些分数,例如:
df.ix[[(0,'AR'),(0,'CN'),(0,'SC')],:]
结果:
score
id iso
0 AR 1.0203
CN 1.2402
SC 1.4552
现在我构建了元组列表,然后用ix传递它。阅读http://pandas.pydata.org/pandas-docs/stable/indexing.html#multiindexing-using-slicers,我觉得有一种比传递元组列表更有效的方法,但我无法理解如何处理它。在这种情况下,如何构建多索引切片器?
答案 0 :(得分:3)
您可以使用multiindexing using slicers
>>> idx = pd.IndexSlice
>>> df.loc[idx[0, ['AR','CN','SC']],:]
score
id iso
0 AR 1.020
CN 1.240
SC 1.455
甚至更简单:
>>> df.loc[(0, ['AR','CN','SC']),:]
或者,或者:
>>> i = df.index.get_level_values(1).isin(['AR','CN','SC'])
>>> j = df.index.get_level_values(0) == 0
>>> df.loc[i & j]