Python- Pandas,过滤器取组中的最后一个元素,然后是组中的第一个元素

Python- Pandas, filter take last element in group, then first element in group

从这里跟进问题:

在 pandas 中,如何删除第一个组中的最后一行,然后删除组中所有后续条目的第一行?

例如

      X   Y
a a   0   1
  a   2   3
  c   4   5
  d   6   7
b e   8   9
  f  10  11
  g  12  13
c h  14  15
  i  16  17
d j  18  19

我想要这个

    X   Y
a d 6   7
b e 8   9
c h 14 15
d j 18 19

首先检查第一层的第一个值 get_level_values and then groupby with apply - first group by tail and all another by head:

first = df.index.get_level_values(0)[0]
df = df.groupby(level=0, sort=False, group_keys=False)
       .apply(lambda x: x.tail(1) if x.name == first else x.head(1))
print (df)
      X   Y
a d   6   7
b e   8   9
c h  14  15
d j  18  19