因此,我了解到可以使用DataFrame.groupby而不用使用MultiIndex进行子采样/横截面。
另一方面,当我在DataFrame上具有MultiIndex时,仍然需要使用DataFrame.groupby进行子采样/横截面。
那么,除了在打印时非常有用和漂亮地显示层次结构之外,MultiIndex有什么好处?
在pandas 0.4版本中引入了分级索引(也称为“多级”索引)。
这为一些非常复杂的数据分析和操作打开了大门,尤其是在处理高维数据时。本质上,例如,它使您能够有效地存储和处理二维表格结构(DataFrame)中的任意高维数据。
试想像这样构造一个数据框MultiIndex
:
import pandas as pd
import numpy as np
np.arrays = [['one','one','one','two','two','two'],[1,2,3,1,2,3]]
df = pd.DataFrame(np.random.randn(6,2),index=pd.MultiIndex.from_tuples(list(zip(*np.arrays))),columns=['A','B'])
df # This is the dataframe we have generated
A B
one 1 -0.732470 -0.313871
2 -0.031109 -2.068794
3 1.520652 0.471764
two 1 -0.101713 -1.204458
2 0.958008 -0.455419
3 -0.191702 -0.915983
这df
只是二维的数据结构
df.ndim
2
但是我们可以想象一下,将输出视为3维数据结构。
one
与1
数据-0.732470 -0.313871
。one
与2
数据-0.031109 -2.068794
。one
与3
数据1.520652 0.471764
。又名:“以二维表格结构有效存储和处理任意高维数据”
这不仅是“漂亮的展示”。由于我们现在有了一个层次索引,因此它具有易于检索数据的优点。
例如。
In [44]: df.ix["one"]
Out[44]:
A B
1 -0.732470 -0.313871
2 -0.031109 -2.068794
3 1.520652 0.471764
只会为属于“一个”的一组数据提供一个新的数据帧。
通过执行以下操作,我们可以进一步缩小数据选择范围:-
In [45]: df.ix["one"].ix[1]
Out[45]:
A -0.732470
B -0.313871
Name: 1
当然,如果我们想要一个特定的值,这是一个例子:
In [46]: df.ix["one"].ix[1]["A"]
Out[46]: -0.73247029752040727
因此,如果我们有更多的索引(除了上面示例中显示的2个索引之外),我们基本上可以向下钻取并选择我们真正感兴趣的数据集,而无需groupby
。
我们甚至可以从数据框中获取横截面(行或列)。
按行:
In [47]: df.xs('one')
Out[47]:
A B
1 -0.732470 -0.313871
2 -0.031109 -2.068794
3 1.520652 0.471764
按列:-
In [48]: df.xs('B', axis=1)
Out[48]:
one 1 -0.313871
2 -2.068794
3 0.471764
two 1 -1.204458
2 -0.455419
3 -0.915983
Name: B
问题内容: 我有一个带有列“ A”和“ B”的多索引数据框。 有没有一种方法可以通过在多索引的一列上进行过滤而不选择将索引重新设置为单列索引来选择行? 例如。 问题答案: 一种方法是使用Index方法: 在0.13,你就可以使用与参数: 注意:如果这是列MultiIndex而不是索引,则可以使用相同的技术:
问题内容: 我这样制作数据框。 我想通过使用一些熊猫方法将索引转换为此(例如set_index,stack 、、) 我怎样才能做到这一点? 问题答案: 我认为你需要与重塑,然后交换在水平由列由去年的排序列: 用另一种解决方案和:
当我将函数应用于Groupby对象的多个列时,Pandas会抛出一个Future Warning。它建议使用列表作为索引,而不是元组。一个人会怎么做?
我想更改我的熊猫数据框架中的一个值,我想我误解了索引的工作方式。 我得到输出 我想将df中的值0.665873更改为1。我试过了 但我得到了错误 我试图用示例数据帧复制该问题,但无济于事。 我认为问题在于,当我使用实际数据时,我得到了一系列的输出,但当我使用实践数据时,得到了一个浮点。为什么我得到的是这个系列而不是浮点0.665873?
问题内容: 我创建了一个从,当我重新采样一些数据,象这样一个数:其中是: 这产生了一个看起来像这样的系列: 索引看起来像: 我不希望第二列作为索引。理想情况下,我将第1列作为“日期”,将第2列作为“销售”(删除索引的第二层)。我不太清楚如何重新配置索引。 问题答案: 只需致电: 有多种删除列的方法: 调用两次并指定一列: 重置索引后删除列: 重置后致电: 然后,在重置索引后,只需重命名列
问题内容: 假设我用两列(一个DateTime)和一个(整数)创建了一个熊猫DataFrame 。现在,我想根据第一列()中的值创建一个DatetimeIndex : 一切似乎都正常,除了我打印DataFrame时,它说它具有Int64Index。 我是在做错事还是不正确理解Indeces的概念? 问题答案: 没有就位(除非您通过)。否则一切正确 同样作为参考,在即将到来的0.12版本(下周)中,