Python 熊猫的多指标选择
关于按多索引选择行的问题 df: 我想从A2/B1中选择多索引级别(2)>1的可乐。 我分多个步骤进行:Python 熊猫的多指标选择,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,关于按多索引选择行的问题 df: 我想从A2/B1中选择多索引级别(2)>1的可乐。 我分多个步骤进行: df1=df.loc[A2,[B7],:,] 出于某种原因,我必须在括号中表示第(1)级 df1.index = x1.index.droplevel(0) df1.index = x1.index.droplevel(0) df1.loc[1:,'colA'] 我知道这是太多了,但我不知道如何做得更简单。我能想到的不想工作的方法。因为您正在处理未命名的索引列,一种方法是在ile
df1=df.loc[A2,[B7],:,]
出于某种原因,我必须在括号中表示第(1)级
df1.index = x1.index.droplevel(0)
df1.index = x1.index.droplevel(0)
df1.loc[1:,'colA']
我知道这是太多了,但我不知道如何做得更简单。我能想到的不想工作的方法。因为您正在处理未命名的索引列,一种方法是在
ilevel.*
上使用query
df.query("ilevel_0 == 'A2' and ilevel_1 == 'B1' and ilevel_2 > 1")
colA ColB
A2 B1 2 ca6 cb6
f = df.index.get_level_values
df.loc[(f(0) == 'A2') & (f(1) == 'B1') & (f(2) > 1)]
colA ColB
A2 B1 2 ca6 cb6
另一种方法是使用
索引。获取\u级别\u值
df.query("ilevel_0 == 'A2' and ilevel_1 == 'B1' and ilevel_2 > 1")
colA ColB
A2 B1 2 ca6 cb6
f = df.index.get_level_values
df.loc[(f(0) == 'A2') & (f(1) == 'B1') & (f(2) > 1)]
colA ColB
A2 B1 2 ca6 cb6
您还可以通过两个操作来完成。首先使用loc
选择A2
和B1
中的部分,然后通过设置query('index>1')
对剩余索引进行另一次查询
上面副本中^index的可能副本是一个命名索引,因此它不适用于此处。@Ranny,请下次发布一些可复制的数据。您可以使用df.to_dict()
轻松完成此操作。谢谢在我尝试之前。我知道查询有点慢。如果我将名字添加到索引级别,会有什么变化?@Ranny实际上没什么变化。。。只是字符串表达式。如果你不想query
,loc
应该很快。重命名df.index.get\u level\u value
到f
非常酷+感谢所有的帮助。我会用“f”法,但会把另外两个留在阿森纳。我只需要去掉前两层的多重索引。我认为reindex会做得很好。再次感谢。@Ranny,不客气。别忘了对我们的答案投票,接受最有帮助的答案。我喜欢这个答案(因为我更了解它)。它工作,只是我需要排序索引之前。唯一一件事是我不能在query的引号内传递变量。你是怎么做到的?a=1;“index>a”@Ranny.query(“index>@a”)
@Ranny混音loc
和query
都不如使用这两种方法干净。:-)谢谢,泰。事实上,我会同意你的解决方案,在%的时间里有很大的不同。3.6对71.6(无f分配)。“下次我会记得的。”兰尼说。谢谢你让我知道你的实验。