相关疑难解决方法(0)

在pandas MultiIndex DataFrame中选择行

目标和动机

(x, y)API已经日益普及,多年来,然而,没有关于它的一切是完全理解在结构方面,工作和相关的操作.

一个重要的操作是过滤.过滤是一种常见的要求,但用例是多种多样的.因此,某些方法和功能将比其他用例更适用于某些用例.

总之,本文的目的是触及一些常见的过滤问题和用例,演示解决这些问题的各种不同方法,并讨论它们的适用性.本文试图解决的一些高级问题是

  • 基于单个值/标签切片
  • 基于来自一个或多个级别的多个标签进行切片
  • 过滤布尔条件和表达式
  • 哪种方法适用于什么情况

这些问题已分解为6个具体问题,如下所列.为简单起见,以下设置中的示例DataFrame仅具有两个级别,并且没有重复的索引键.提出问题的大多数解决方案可以推广到N级.

本文不会介绍如何创建MultiIndexes,如何对它们执行赋值操作,或任何与性能相关的讨论(这些是另一个时间的单独主题).


问题

问题1-6将在上下文中询问下面的设置.

mux = pd.MultiIndex.from_arrays([
    list('aaaabbbbbccddddd'),
    list('tuvwtuvwtuvwtuvw')
], names=['one', 'two'])

df = pd.DataFrame({'col': np.arange(len(mux))}, mux)

         col
one two     
a   t      0
    u      1
    v      2
    w      3
b   t      4
    u      5
    v      6
    w      7
    t      8
c   u      9
    v     10
d   w     11
    t     12
    u     13
    v     14
    w     15
Run Code Online (Sandbox Code Playgroud)

问题1:选择单个项目
如何在"1"级中选择"a"的行?

         col
one two     
a   t      0 …
Run Code Online (Sandbox Code Playgroud)

python slice multi-index dataframe pandas

78
推荐指数
2
解决办法
1万
查看次数

熊猫:沿着多索引的第一层切片

我已经设置了一个带有两个索引的DataFrame.但切片的行为并不像预期的那样.我意识到这是一个非常基本的问题,所以我搜索了类似的问题:

pandas:按二级索引的范围切片MultiIndex

Python Pandas通过二级索引(或任何其他级别)切片多索引

我还查看了相应的文档

奇怪的是,所提出的解决方案都不适用于我.我已经设置了一个简单的例子来展示问题:

# this is my DataFrame
frame = pd.DataFrame([
{"a":1, "b":1, "c":"11"},
{"a":1, "b":2, "c":"12"},
{"a":2, "b":1, "c":"21"},
{"a":2, "b":2, "c":"22"},
{"a":3, "b":1, "c":"31"},
{"a":3, "b":2, "c":"32"}])

# now set a and b as multiindex
frame = frame.set_index(["a","b"])
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试不同的切片方式.前两行有效,第三行抛出异常:

# selecting a specific cell works
frame.loc[1,2]

# slicing along the second index works
frame.loc[1,:]

# slicing along the first doesn't work
frame.loc[:,1]
Run Code Online (Sandbox Code Playgroud)

这是一个TypeError:

TypeError: cannot do label indexing on <class 'pandas.core.indexes.base.Index'> with these indexers …
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

6
推荐指数
1
解决办法
935
查看次数

Pandas Multi-index slice only on secondary index

I have the following pandas (related to the example here: pandas: slice a MultiIndex by range of secondary index)

import numpy as np
import pandas as pd

variable = np.repeat(['a','b','c'], [5,5,5])
time = [0,1,5,10,20,0,1,5,10,20,0,1,5,10,20]

arra = [variable, time]

index=pd.MultiIndex.from_arrays(arra, names=("variable", "time"))

s = pd.Series(
    np.random.randn(len(sequence)), 
    index=index
)
Run Code Online (Sandbox Code Playgroud)

Output would be

# In [1]: s
variable  time
a         0      -1.284692
          1      -0.313895
          5      -0.980222
          10     -1.452306
          20     -0.423921
b         0       0.248625
          1       0.183721
          5      -0.733377
          10      1.562653
          20     -1.092559
c …
Run Code Online (Sandbox Code Playgroud)

python multi-index pandas

4
推荐指数
1
解决办法
3679
查看次数

标签 统计

pandas ×3

python ×3

dataframe ×2

multi-index ×2

numpy ×1

slice ×1