2017-08-05 159 views
1

返回最高值,让我们考虑定义为跟随大熊猫数据帧:蟒蛇,熊猫:从多指标

from decimal import Decimal 
from pandas import Timestamp 
dic={'volume': {('CSC', Timestamp('2016-08-05 00:00:00'), 'CSCF7'): Decimal('13'), 
    ('CSC', Timestamp('2016-08-05 00:00:00'), 'CSCG7'): Decimal('6'), 
    ('CSC', Timestamp('2016-08-05 00:00:00'), 'CSCH7'): Decimal('12'), 
    ('DA', Timestamp('2016-08-05 00:00:00'), 'DCF7'): Decimal('47'), 
    ('DA', Timestamp('2016-08-05 00:00:00'), 'DCG7'): Decimal('16'), 
    ('DA', Timestamp('2016-08-05 00:00:00'), 'DCH7'): Decimal('27') 
}} 

df=pd.DataFrame(dic) 

enter image description here

我想,使其返回第三指数的最高值来改造它级别。例如,在当前的例子中:

    highest 
CSC 2016-08-05 CSCF7 
DA  2016-08-05 DCF7 

任何人都有一个想法如何执行该操作?

回答

1

你可以groupbylevel并采取idxmax

In [317]: df.groupby(level=0).idxmax() 
Out[317]: 
           volume 
CSC (CSC, 2016-08-05 00:00:00, CSCF7) 
DA  (DA, 2016-08-05 00:00:00, DCF7) 

In [318]: df.groupby(level=0).idxmax().volume.apply(pd.Series) 
Out[318]: 
     0   1  2 
CSC CSC 2016-08-05 CSCF7 
DA DA 2016-08-05 DCF7 

或者,

In [338]: df.groupby(level=[0, 1]).volume.idxmax().apply(lambda x: x[-1]) 
Out[338]: 
CSC 2016-08-05 CSCF7 
DA 2016-08-05  DCF7 
Name: volume, dtype: object 

或者,

In [341]: df.groupby(level=[0, 1]).volume.idxmax().str[-1] 
Out[341]: 
CSC 2016-08-05 CSCF7 
DA 2016-08-05  DCF7 
Name: volume, dtype: object 
+0

很有趣,工作THX。 '.apply(pd.Series)'如何工作?这对我来说有点困惑! –