因此,我了解到我可以使用DataFrame.groupby,而无需使用MultiIndex进行子采样/横截面。另一方面,当我在DataFrame上有一个MultiIndex时,我仍然需要使用DataFrame.groupby来完成子采样/横截面。熊猫多指标的好处?
那么MultiIndex除了打印时相当有用和漂亮的显示层次结构外,还有什么好处呢?
因此,我了解到我可以使用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
。A.k.a .:“有效地存储和在2维表格结构操纵任意高维数据”
这不仅是一个“漂亮的显示”。由于我们现在有一个分层索引,因此它具有便于检索数据的好处。
例如。
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
所以,如果我们有更多的索引(除了上面示例中显示的两个索引之外),我们基本上可以深入并选择我们真正感兴趣的数据集,而不需要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
3数据对在所述三维数据结构(第一描述'一个与1与数据-0.790620 0.229276 。......)似乎不符合你实际例子中的任何数据。 – Gerrat
当from_arrays方法可用时,是否有任何特殊原因使用MultiIndex.from_tuples(list(zip(* np.arrays)) ? df = pd.DataFrame(np.random.randn(6,2),index = pd.MultiIndex.from_arrays(np.arrays),列= [ 'A', 'B']) –