2017-08-05 90 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)'如何工作?這對我來說有點困惑! –