Python pandas multiindex从系列中获取信息

时间:2015-04-08 09:47:12

标签: python pandas multi-index

我从时间序列中创建了一个多索引熊猫系列,现在我想读取其中的数据。在所有示例中,我都看到了系列的列或级别被命名。但是,我的系列并非如此。在此多索引中,第一级是日期,第二级是一天中的小时。数据列具有我想要读取的值。

从我的系列中获取所需数据的最简单方法是什么?下面的代码应该是非常自我解释的。

   import pandas as pd
   import numpy as np

   n = 1000
   t = pd.date_range(start ='2012-01-01', periods=n, freq='10T')
   x = np.random.randn(n)
   df = pd.Series(data=x, index=t)


   df1 = df[(df > 1) & (df < 1.5)]
   df2 = df1.groupby([df1.index.date, df1.index.hour]).count()

   df2.head(15)
   #How do I get the data out of df2?
   #For example, I want to read the data for '2012-01-02 01:00'

1 个答案:

答案 0 :(得分:2)

您可以通过在元组中提供两个标签来访问多索引系列中的元素。例如:

In [19]: df2[(datetime.date(2012,1,2), 3)]
Out[19]: 2

但是,这不太方便。所以我认为在这种情况下更好的是不构建多指数 您可以将现有的多索引转换为平面索引,但是我认为更好的方法是将群组略有不同。使用Grouper对象,我可以指定每小时对DatetimeIndex进行分组:

In [120]: df2 = df1.groupby(pd.Grouper(freq='H')).count()

In [121]: df2.head()
Out[121]:
2012-01-01 02:00:00    2
2012-01-01 03:00:00    1
2012-01-01 04:00:00    2
2012-01-01 05:00:00    1
2012-01-01 06:00:00    1
Freq: H, dtype: int64

In [123]: df2['2012-01-02 03:00']
Out[123]: 2

如您所见,结果仍然是DatetimeIndex但具有每小时频率。因此,您可以轻松地使用日期时间字符串进行索引(使用多索引方法无法实现)

注意:上面的groupby实际上等同于更简单的resample

df1.resample('H', how='count')