首页 > 解决方案 > 使用复合索引从 DataFrame 中提取值的正确方法?

问题描述

我有一个数据框,称之为 current_data。该数据帧是通过在另一个数据帧 current_data_raw 上运行统计函数生成的。它在“Method”和“Request.Name”列上有一个复合索引

current_data = current_data_raw.groupby(['Name', 'Request.Method']).size().reset_index().set_index(['Name', 'Request.Method'])

然后我运行一堆统计函数来current_data_raw添加新列current_data

然后我需要查询该数据框以获取特定的列值。我很想做类似的事情:

val = df['Request.Name' == some_name, 'Method' = some_method]['Average']

但是,这不起作用,我在上面尝试的变体也不起作用。 .xs正在返回一个系列。我可以抓住系列中唯一的一行,但这似乎不合适。

标签: pythonpandas

解决方案


如果想要选择MultiIndex可以按级别顺序使用元组,但这里没有指定索引名称,例如'Request.Name'

val = df.loc[(some_name, some_method), 'Average']

另一种方法是使用DataFrame.query,但如果级别名称包含空格或.有必要使用反引号:

val = df.query("`Request.Name`=='some_name' & `Request.Method`=='some_method'")['Average']

如果一个词级别的名称:

val = df.query("Name=='some_name' & Method=='some_method'")['Average']

推荐阅读