该(x, y)API已经日益普及,多年来,然而,没有关于它的一切是完全理解在结构方面,工作和相关的操作.
一个重要的操作是过滤.过滤是一种常见的要求,但用例是多种多样的.因此,某些方法和功能将比其他用例更适用于某些用例.
总之,本文的目的是触及一些常见的过滤问题和用例,演示解决这些问题的各种不同方法,并讨论它们的适用性.本文试图解决的一些高级问题是
这些问题已分解为6个具体问题,如下所列.为简单起见,以下设置中的示例DataFrame仅具有两个级别,并且没有重复的索引键.提出问题的大多数解决方案可以推广到N级.
本文不会介绍如何创建MultiIndexes,如何对它们执行赋值操作,或任何与性能相关的讨论(这些是另一个时间的单独主题).
问题1-6将在上下文中询问下面的设置.
Run Code Online (Sandbox Code Playgroud)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
问题1:选择单个项目
如何在"1"级中选择"a"的行?
col
one two
a t 0 …Run Code Online (Sandbox Code Playgroud) 我已经设置了一个带有两个索引的DataFrame.但切片的行为并不像预期的那样.我意识到这是一个非常基本的问题,所以我搜索了类似的问题:
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) 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)