2014-10-12 71 views
7

我有一個數據幀:熊貓groupby(),agg() - 如何返回沒有多索引的結果?

pe_odds[ [ 'EVENT_ID', 'SELECTION_ID', 'ODDS' ] ] 
Out[67]: 
    EVENT_ID SELECTION_ID ODDS 
0 100429300  5297529 18.00 
1 100429300  5297529 20.00 
2 100429300  5297529 21.00 
3 100429300  5297529 22.00 
4 100429300  5297529 23.00 
5 100429300  5297529 24.00 
6 100429300  5297529 25.00 

當我使用GROUPBY和AGG,我得到一個多指標結果:

pe_odds.groupby([ 'EVENT_ID', 'SELECTION_ID' ])[ 'ODDS' ].agg([ np.min, np.max ]) 
Out[68]: 
         amin amax 
EVENT_ID SELECTION_ID    
100428417 5490293  1.71 1.71 
      5881623  1.14 1.35 
      5922296  2.00 2.00 
      5956692  2.00 2.02 
100428419 603721   2.44 2.90 
      4387436  4.30 6.20 
      4398859  1.23 1.35 
      4574687  1.35 1.46 
      4881396  14.50 19.00 
      6032606  2.94 4.20 
      6065580  2.70 5.80 
      6065582  2.42 3.65 
100428421 5911426  2.22 2.52 

我一直在使用as_index返回沒有multi_index結果嘗試:

pe_odds.groupby([ 'EVENT_ID', 'SELECTION_ID' ], as_index=False)[ 'ODDS' ].agg([ np.min, np.max ], as_index=False) 

但它仍然給我一個多指標。

我可以使用.reset_index(),但它是非常緩慢:

pe_odds.groupby([ 'EVENT_ID', 'SELECTION_ID' ])[ 'ODDS' ].agg([ np.min, np.max ]).reset_index() 

pe_odds.groupby([ 'EVENT_ID', 'SELECTION_ID' ])[ 'ODDS' ].agg([ np.min, np.max ]).reset_index() 
Out[69]: 
    EVENT_ID SELECTION_ID amin amax 
0 100428417  5490293 1.71 1.71 
1 100428417  5881623 1.14 1.35 
2 100428417  5922296 2.00 2.00 
3 100428417  5956692 2.00 2.02 
4 100428419  603721 2.44 2.90 
5 100428419  4387436 4.30 6.20 

我怎樣才能返回結果,而不多指標,使用GROUPBY和/或AGG函數的參數。而不必訴諸使用reset_index()?

回答

6

下面呼叫:

>>> gr = df.groupby(['EVENT_ID', 'SELECTION_ID'], as_index=False) 
>>> res = gr.agg({'ODDS':[np.min, np.max]}) 
>>> res 
    EVENT_ID SELECTION_ID ODDS  
          amin amax 
0 100429300  5297529 18 25 
1 100429300  5297559 30 38 

返回與多功能使用折射率的幀。如果您不希望色譜柱是多索引,您可能會這樣做:

>>> res.columns = list(map(''.join, res.columns.values)) 
>>> res 
    EVENT_ID SELECTION_ID ODDSamin ODDSamax 
0 100429300  5297529  18  25 
1 100429300  5297559  30  38