选择特定多索引级别的行

我有一个带有多索引的数据框,我需要从第一个索引的每个部分中删除第一行。


                        cshoc   prccd       mkt_val    return

gvkey  datadate

001075 2019-01-29  112080000.0   87.36  9.791309e+09  0.006916

       2019-01-30  112080000.0   87.62  9.820450e+09  0.002976

       2019-01-31  112080000.0   88.12  9.876490e+09  0.005706

       2019-02-01  112080000.0   87.65  9.823812e+09 -0.005334

       2019-02-04  112080000.0   87.53  9.810362e+09 -0.001369

...                        ...     ...           ...       ...

316056 2020-01-21   92917000.0  127.14  1.181347e+10 -0.007107

       2020-01-22   92917000.0  129.45  1.202811e+10  0.018169

       2020-01-23   92917000.0  129.80  1.206063e+10  0.002704

       2020-01-24   92917000.0  128.00  1.189338e+10 -0.013867

       2020-01-27   92917000.0  127.67  1.186271e+10 -0.002578`

例如,代码将删除 datadate = '2019-01-29' 和 '2020-01-21' 处的行。第一行将始终具有不同的“数据日期”索引值,因此我无法选择特定值。


我尝试过 .iloc[:,1:]、.iloc[:,:,1:] 之类的方法以及 IndexSlice 的方法。到目前为止,没有任何效果。


任何帮助,将不胜感激!


Smart猫小萌
浏览 152回答 2
2回答

收到一只叮咚

taildf.groupby(level=0).apply(lambda d: d.tail(-1))

DIEA

你也可以试试这个df[df.index.get_level_values(0).duplicated()]Out[262]:                         cshoc   prccd       mkt_val      returngvkey  datadate1075   2019-01-30  112080000.0   87.62  9.820450e+09    0.002976       2019-01-31  112080000.0   88.12  9.876490e+09    0.005706       2019-02-01  112080000.0   87.65  9.823812e+09   -0.005334       2019-02-04  112080000.0   87.53  9.810362e+09   -0.001369316056 2020-01-22   92917000.0  129.45  1.202811e+10    0.018169       2020-01-23   92917000.0  129.80  1.206063e+10    0.002704       2020-01-24   92917000.0  128.00  1.189338e+10   -0.013867       2020-01-27   92917000.0  127.67  1.186271e+10  -0.002578`注意:正如@piRSquared 的评论,在索引级别=0 的一行组中,此解决方案不会丢弃它。它仍然保留那一行,而@piRSquared 的解决方案将完全删除该组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python