【问题标题】:Select rows at specific multiindex level选择特定多索引级别的行
【发布时间】:2020-01-28 18:42:03
【问题描述】:

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

                        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 的方法。到目前为止,没有任何效果。

任何帮助将不胜感激!

【问题讨论】:

    标签: python pandas dataframe multidimensional-array indexing


    【解决方案1】:

    tail

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

    【讨论】:

    • 不错的解决方案 :) +1
    【解决方案2】:

    你也可以试试这个

    df[df.index.get_level_values(0).duplicated()]
    
    Out[262]:
                             cshoc   prccd       mkt_val      return
    gvkey  datadate
    1075   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-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 的解决方案将完全删除该组。

    【讨论】:

    • 我想过这样做。这在组中只有一个成员的情况下会中断。此方法将留下该单个成员。另一种说法是,这仅在保证每个零级索引值有多个成员时才有效。
    • @piRSquared:是的,我同意。在单行组的情况下,此解决方案保留该单行。我编辑添加了注释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2014-06-24
    • 2021-02-13
    • 2018-07-08
    • 2019-11-19
    • 2022-07-08
    相关资源
    最近更新 更多