获取和分析数据框的索引列

Getting and analyzing the index columns of a dataframe

我有一个大型数据框,我在其中将各种元数据存储在多索引中(另请参阅 )。

我的数据框基本上是这样的:

location    zero    A         B         C  and so on
type        zero  MUR  RHE  DUJ  RHE  RHE
name        zero  foo  bar  baz  boo  far
1930-03-01     0  2.1  3.4  9.4  5.4  5.5
1930-04-01     0  3.1  3.6  7.3  6.7  9.5
1930-05-01     0  2.5  9.1  8.0  1.1  8.1
and so on

这样我就可以很容易地 select 例如所有 DUJ 数据类型 mydf.xs('DUJ', level = 'type', axis = 1).

但是 我如何访问 type 索引中的字符串并消除双打并可能得到一些静态信息?

我正在寻找类似

的输出
types('MUR', 'RHE', 'DUJ')

and/or

types:
DUJ 1
MUR 1
RHE 3

给我一个数据类型列表以及它们出现的频率。

我可以通过

访问索引
[In]mytypes = mydf.columns.get_level_values(1)

[In]mytypes
[Out]Index([u'zero', u'MUR', u'RHE', u'DUJ', u'RHE', u'RHE'], dtype='object')

但我想不出任何简单的方法来处理这些信息,尤其是考虑到我的真实数据集将 return 1500 个条目。我的第一个想法很简单 mytypes.sort() 但显然我 Cannot sort an 'Index' object.

能够描述你的数据集对我来说似乎是一件相当重要的事情,所以我希望 pandas 中有一些内置的东西,但我似乎找不到它。而且MultiIndex documentation似乎只关心构建和设置索引,而不关心分析它们。

Index 对象有这个 value_counts 的方法所以你可以调用:

mytypes.value_counts()

这将return索引中的索引值和计数作为值。

您的链接问题示例:

In [3]:
header = [np.array(['location','location','location','location2','location2','location2']), 
np.array(['S1','S2','S3','S1','S2','S3'])] 
df = pd.DataFrame(np.random.randn(5, 6), index=['a','b','c','d','e'], columns = header )
df.columns

Out[3]:
MultiIndex(levels=[['location', 'location2'], ['S1', 'S2', 'S3']],
           labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]])

In [4]:    
df.columns.get_level_values(1).value_counts()

Out[4]:
S1    2
S2    2
S3    2
dtype: int64