pandas - 混合 .loc 和 .iloc 切片以选择索引子级别的前 n 行
问题描述
我有一个多级索引。我想选择每种样式的前两行(以黄色突出显示的示例)。DataFrame的一种.iloc[:, :2]
,但它不起作用。
另一种变体是在索引的顶层.loc
只选择某些,然后选择内层的第一行。例如,“前 2 行 'fox' 和 'bear' 样式。style
.iloc[:n]
n
bureau
当我想根据标签对所有内容进行切片时,我可以使用IndexSlice
它,但我找不到基于位置的切片或混合标签和基于位置的切片的等价物。
import numpy as np
tuples = [
('fox', 'anton1'),
('fox', 'anton2'),
('fox', 'anton3'),
('fox', 'anton4'),
('bat', 'girv2'),
('bat', 'girv3'),
('bat', 'girv4'),
('bat', 'girv5'),
('bear', 'kalg1'),
('bear', 'kalg2'),
('bear', 'kalg3'),
('bear', 'kalg4'),
]
np.random.seed(1)
data = np.random.rand(12,1)
mix = pd.MultiIndex.from_tuples(tuples, names=('style', 'bureau'))
df = pd.DataFrame(index=mix, data=data, columns=['foo'])
解决方案
您可以使用.GroupBy.head
:
df.groupby(level='style').head(2)
这是另一种方式:
df.groupby(level='style').apply(lambda d: d.iloc[2:4]).droplevel(0)
推荐阅读
- python - 通过比较列中的字典值来收集 DataFrame 行
- regex - 按请求 URI 查看过滤器
- typescript - 未找到 Prisma 客户端架构,nextjs 应用程序
- angular - 如何将我的 Angular 应用程序部署到不同的 firebase 环境?
- javascript - KaTeX 的官方入门模板不起作用
- ssh - scp 远程到本地权限被拒绝
- c# - C# 检查数组是否“满”
- java - 如何让 JUnit 测试与 Gradle 项目一起运行?
- firebase - Firestore Flutter 中的 userId 为 null
- html - XPath如何获取段落标签中的所有文本及其所有内部嵌套文本,例如粗体字