2017-08-05 3 views
1

から最高値を返すには、次のように定義されたパンダのデータフレームを考えることができます:のpython、パンダ:マルチインデックス

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

あなたはlevelgroupbyidxmax

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)'はどのように機能しますか?それは私に少し混乱している! –

関連する問題