2015-02-12 20 views
0

類我有一個熊貓數據幀的對象,看起來像下面這樣:由「類別」集團在大熊貓數據框對象輸出到字典對象

In [106]: df 
    Out [106]: df[ 
        Amount  Category   
      date 
    2014-08-05  18.40  Thing01 
    2014-08-05  192.60  Thing01 
    2014-08-05  10.42  Thing02 
    2014-08-05  13.34  Thing07 
    2014-08-05  364.56  Thing04 
    2014-08-05  843.21  Thing03 
    2014-08-04  14.65  Thing04 
    2014-08-04  56.98  Thing11 
    2014-08-04  76.21  Thing99 
    2014-08-04  786.22  Thing99 
    2014-08-04  87.44  Thing99 
    2014-08-04  53.23  Thing01 
    2014-08-04  32.12  Thing99 
    ] 

我要組這個數據,並使用結果來創建Python字典,看起來是這樣的:在末尾的各種功能,包括。適用方法(我不完全理解df.groupby(「類別」):

In [107]: OutInfo 
Out [107]: OutInfo = { 

    Thing01: 
          Amount 
       date    
      2014-08-05  18.40 
      2014-08-05  192.60 
      2014-08-04  53.23 

    Thing02: 
          Amount 
       date  
      2014-08-05  10.42 

    Thing07: 
          Amount 
       date 
      2014-08-05  13.34 

    Thing04: 
          Amount 
       date 
      2014-08-05  364.56 
      2014-08-04  14.65 

    Thing03: 
          Amount 
       date 
      2014-08-05  843.21 

    Thing11: 
          Amount 
       date 
      2014-08-04  56.98 

    Thing99: 
          Amount 
       date 
      2014-08-04  76.21 
      2014-08-04  786.22 
      2014-08-04  87.44 
} 

我一直在使用類似的命令嘗試要麼...)。我嘗試了其他方法,但是我有一天有多個條目的事實阻止了我使用這些方法。預先感謝任何幫助!

-Jeremy

+0

我想避免使用循環。我已經有了一個使用「for」循環的解決方案,但這很慢。 – aacealo 2015-02-12 05:01:56

回答

0

groupby是正確的想法。爲了得到你想要什麼,你可以如果一個groupby對象調用list這樣做

>>> d = {k: v.drop("Category", axis=1) for k,v in list(df.groupby("Category"))} 
>>> pprint.pprint(d) 
{'Thing01':    Amount 
date    
2014-08-05 18.40 
2014-08-05 192.60 
2014-08-04 53.23, 
[...] 
'Thing99':    Amount 
date    
2014-08-04 76.21 
2014-08-04 786.22 
2014-08-04 87.44 
2014-08-04 32.12} 

,你組鍵/值元組的列表。如果你打電話給dict(list(grouped)),這會變成一本字典。但是,通常情況下,您不會像示例所需的輸出中那樣刪除鍵列。所以,如果你願意保留額外的列,它更容易:

>>> d = dict(list(df.groupby("Category"))) 
>>> d["Thing01"] 
      Amount Category 
date      
2014-08-05 18.40 Thing01 
2014-08-05 192.60 Thing01 
2014-08-04 53.23 Thing01 
+0

沒有必要轉換爲列表。只需迭代groupby對象'd = {k:v.drop(「Category」,axis = 1)for k,v in df.groupby(「Category」)}' – awhan 2015-02-12 08:14:08

+0

我用dict(list(df。 groupby(「Category」)))方法。它削掉了我一直使用的「for」循環的整整一秒。謝謝! – aacealo 2015-02-12 11:18:29