Выберите строки на заданном уровне c мультииндекс - PullRequest
0 голосов
/ 28 января 2020

У меня есть фрейм данных с мультииндексом, и мне нужно удалить первую строку из каждого фрагмента первого индекса.

                        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 '. Первая строка всегда будет иметь другое значение индекса «дата данных», поэтому я не могу выбрать определенные c значения.

Я пробовал такие методы, как .iloc [:, 1:], .iloc [:,:, 1:] и другие с IndexSlice. Пока ничего не помогло.

Любая помощь будет признательна!

Ответы [ 2 ]

3 голосов
/ 28 января 2020

tail

df.groupby(level=0).apply(lambda d: d.tail(-1))
1 голос
/ 28 января 2020

Вы также можете попробовать это

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 полностью удалит эту группу.

...