2013-05-12 72 views
0

我需要在时间序列中进行简单的协方差分析。我的原始数据是这样的形状:熊猫塑造协变数据

WEEK_END_DATE    TITLE_SHORT   SALES 
2012-02-25 00:00:00.000000 "Bob" (EBK)   1 
          "Bob" (EBK)   1 
2012-03-31 00:00:00.000000 "Bob" (EBK)   1 
          "Bob" (EBK)   1 
2012-03-03 00:00:00.000000 "Sally" (EBK)   1 
2012-03-10 00:00:00.000000 "Sally" (EBK)   1 
2012-03-17 00:00:00.000000 "Sally" (EBK)   1 
          "Sally" (EBK)   1 
2012-04-07 00:00:00.000000 "Sally" (EBK)   1 

正如你所看到的,有一些重复。除非我错过了某些东西,否则我需要这些数据成为每个标题的一组向量,以便我可以使用numpy.cov。

问:

如何查找日期和名称重复,并通过SUM聚合吗?我一直试图使用WEEK_END_DATE和TITTLE_SHORT来使用熊猫群,但它以我不明白的方式编制索引。

编辑: 具体而言,当我尝试df.groupby(["WEEK_END_DATE", "TITLE_SHORT"]),我得到这个:

>df.ix[0:3] 

WEEK_END_DATE    TITLE_SHORT    
2012-02-04 00:00:00.000000 'SALEM'S LOT (EBK)   <pandas.core.indexing._NDFrameIndexer object a... 
          'TIS THE SEASON! (EBK)  <pandas.core.indexing._NDFrameIndexer object a... 
          (NOT THAT YOU ASKED) (EBK) <pandas.core.indexing._NDFrameIndexer object a... 
dtype: object 

,并试图选择df.ix[1,]得到这个错误:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Library/Python/2.7/site-packages/pandas-0.11.0rc1_20130415-py2.7-macosx-10.8-intel.egg/pandas/core/series.py", line 613, in __getitem__ 
    return self.index.get_value(self, key) 
    File "/Library/Python/2.7/site-packages/pandas-0.11.0rc1_20130415-py2.7-macosx-10.8-intel.egg/pandas/core/index.py", line 1630, in get_value 
    loc = self.get_loc(key) 
    File "/Library/Python/2.7/site-packages/pandas-0.11.0rc1_20130415-py2.7-macosx-10.8-intel.egg/pandas/core/index.py", line 2285, in get_loc 
    result = slice(*self.slice_locs(key, key)) 
    File "/Library/Python/2.7/site-packages/pandas-0.11.0rc1_20130415-py2.7-macosx-10.8-intel.egg/pandas/core/index.py", line 2226, in slice_locs 
    start_slice = self._partial_tup_index(start, side='left') 
    File "/Library/Python/2.7/site-packages/pandas-0.11.0rc1_20130415-py2.7-macosx-10.8-intel.egg/pandas/core/index.py", line 2250, in _partial_tup_index 
    raise Exception('Level type mismatch: %s' % lab) 
Exception: Level type mismatch: 3 
+0

通过“原始数据”,你的意思是你的输入文件看起来像什么? – DSM 2013-05-12 23:21:22

+0

你可以发布你不明白的索引吗? – 2013-05-12 23:22:32

+0

DSM-是,输入文件。瑞恩 - 就在它上面。 – 2013-05-12 23:26:57

回答

2

我不能完全肯定我知道发生了什么,但这是我的开始。首先,获取数据(这看起来固定宽度给我):

>>> df = pd.read_fwf("weekend.dat", widths=(26, 20, 9), parse_dates=[0]) 
>>> df = df.fillna(method="ffill") 
>>> df 
     WEEK_END_DATE TITLE_SHORT SALES 
0 2012-02-25 00:00:00 "Bob" (EBK)  1 
1 2012-02-25 00:00:00 "Bob" (EBK)  1 
2 2012-03-31 00:00:00 "Bob" (EBK)  1 
3 2012-03-31 00:00:00 "Bob" (EBK)  1 
4 2012-03-03 00:00:00 "Sally" (EBK)  1 
5 2012-03-10 00:00:00 "Sally" (EBK)  1 
6 2012-03-17 00:00:00 "Sally" (EBK)  1 
7 2012-03-17 00:00:00 "Sally" (EBK)  1 
8 2012-04-07 00:00:00 "Sally" (EBK)  1 

然后聚集的DUP:

>>> g = df.groupby(["WEEK_END_DATE", "TITLE_SHORT"]).sum().reset_index() 
>>> g 
     WEEK_END_DATE TITLE_SHORT SALES 
0 2012-02-25 00:00:00 "Bob" (EBK)  2 
1 2012-03-03 00:00:00 "Sally" (EBK)  1 
2 2012-03-10 00:00:00 "Sally" (EBK)  1 
3 2012-03-17 00:00:00 "Sally" (EBK)  2 
4 2012-03-31 00:00:00 "Bob" (EBK)  2 
5 2012-04-07 00:00:00 "Sally" (EBK)  1 

然后尽一切cov东西,你需要(注意:cov是一个系列/ DataFrame/GroupBy方法也是如此,所以你不需要特别地调用np.cov)。

+0

工作正常!我认为reset_index是关键 - 当我第一次尝试这样做时,它变得混乱了。我应该问一个关于covar部分的单独问题吗? – 2013-05-13 01:08:04

+0

@OlgaMu:不妨! – DSM 2013-05-13 01:13:31

+0

谢谢帝斯曼! :) – 2013-05-13 01:18:35