【问题标题】:python, pandas: return highest values from multiindexpython,pandas:从多索引返回最高值
【发布时间】:2018-01-13 06:19:34
【问题描述】:

让我们考虑一个如下定义的 pandas DataFrame:

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)

我想对其进行转换,使其返回第三个索引级别的最大值。例如,在当前示例中:

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

有人知道如何执行此操作吗?

【问题讨论】:

    标签: python pandas indexing multi-index


    【解决方案1】:

    您可以在levelgroupby 并使用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
    

    【讨论】:

    • 非常有趣和有效的谢谢。 .apply(pd.Series) 是如何工作的?这让我有点困惑!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2017-08-27
    • 2016-09-16
    相关资源
    最近更新 更多