python - 使用标签和布尔组合对多索引 Pandas 进行子集化
问题描述
给定一个多索引数据框,如何选择与索引的一个标签相关并且在列中具有特定值的所有行?
这是一个示例数据框:
import pandas as pd
index = pd.MultiIndex.from_product([['xy1','xy2','xy3'], ['1','2','3','4','5']], names=['Tag', 'Page'])
df = pd.DataFrame([1,1,1,4,5,1,1,61,4,51,1,1,4,5,1], index, columns=['Value'])
df
从中我想选择所有带有标签xy1 且列Value为 1 的行。因此,产生这个:
index2 = pd.MultiIndex.from_product([['1','2','3']], names=['Page'])
df2 = pd.DataFrame([1,1,1], index2, columns=['Value'])
df2
我怎样才能以优雅的方式实现这一目标?
解决方案
使用DataFrame.query
和删除第一级DataFrame.reset_index
:
df1 = df.query("Tag == 'xy1' & Value == 1").reset_index(level=0, drop=True)
或首先按第一级选择,DataFrame.xs
然后按Value
列过滤:
df1 = df.xs('xy1').query("Value == 1")
print (df1)
Value
Page
1 1
2 1
3 1
推荐阅读
- assembly - 我们如何使用这些指令在汇编中使用跳转?
- entity-framework - 在 EntityFramework 2.1 Fluent API 在插入时设置审计字段
- machine-learning - 序列模型 Word2vec
- android - Recyclerview 游标适配器回收问题
- java - 如何使用 intent.putextra 设置 videoview 资源
- python - Python - 将系列(或列表)转换为数据框,只需要值
- reactjs - 有什么方法可以指定一个回调来包装响应吗?
- java - 创建从华氏到摄氏的Java转换表
- sql - 具有两个条件的 SQL 查询
- javascript - 如何使用 mongoose 推送到集合中的数组中的数组?