Pandas:按整数进行多索引二级切片

Posted

技术标签:

【中文标题】Pandas:按整数进行多索引二级切片【英文标题】:Pandas: Multi-index second-level slicing by integer 【发布时间】:2016-12-12 01:41:48 【问题描述】:

我有一个看起来像这样的多索引数据框:

In [45]: df
Out[45]: 
                    Last  Days to expiry
Date       Ticker                       
1988-06-23 COU88   15.65         48 days
           COV88   15.65         78 days
1988-06-24 COU88   15.65         47 days
           COV88   15.56         77 days
           COX88   15.75        108 days
1988-06-27 COU88   15.10         44 days
           COV88   15.30         74 days
1988-06-28 COU88   15.27         43 days
           COV88   15.27         73 days
1988-06-29 COU88   14.97         42 days
           COV88   14.92         72 days
1988-06-30 COU88   14.85         41 days
           COV88   14.80         71 days

索引有两个级别(即“日期”和“代码”)。 我想通过整数对第一行的所有日期进行切片,这意味着第一个股票行情。结果应如下所示:

                    Last  Days to expiry
Date       Ticker                       
1988-06-23 COU88   15.65         48 days
1988-06-24 COU88   15.65         47 days
1988-06-27 COU88   15.10         44 days
1988-06-28 COU88   15.27         43 days
1988-06-29 COU88   14.97         42 days
1988-06-30 COU88   14.85         41 days

另外,如果可能的话,我想过滤列以仅获取名为“Last”的列。我无法为 df.iloc 获得正确的语法

非常感谢您的提示

【问题讨论】:

IIUC 那么我认为df.groupby(level='Date').first() 应该可以工作 它工作得非常好!非常感谢! 你认为有办法让它与 df.iloc 一起工作吗?只是出于好奇 我找不到简单的方法,您可以 reindex 通过构造一个删除重复值的新索引,但这不像 groupby 方法那么简单 【参考方案1】:

您可以在第一个索引级别上groupby 并调用first

In [173]:
df.groupby(level='Date').first()

Out[173]:
             Last Days to expiry
Date                            
1988-06-23  15.65        48 days
1988-06-24  15.65        47 days
1988-06-27  15.10        44 days
1988-06-28  15.27        43 days
1988-06-29  14.97        42 days
1988-06-30  14.85        41 days

【讨论】:

工作正常,再次感谢。我现在正在研究 groupbys

以上是关于Pandas:按整数进行多索引二级切片的主要内容,如果未能解决你的问题,请参考以下文章

pandas:选择索引,然后选择多索引切片上的列

为啥 pandas 多索引数据帧切片看起来不一致?

pandas中的多索引(时间序列)切片错误

转换多索引数据框并按位置更改二级索引

熊猫:切片多索引与许多索引

具有重复值的 Python 多索引切片