Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫的多指标选择_Python_Pandas_Dataframe_Multi Index - Fatal编程技术网

Python 熊猫的多指标选择

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

关于按多索引选择行的问题

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']

我知道这是太多了,但我不知道如何做得更简单。我能想到的不想工作的方法。

因为您正在处理未命名的索引列,一种方法是在
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分配)。“下次我会记得的。”兰尼说。谢谢你让我知道你的实验。