Python- Pandas,filter取组中的最后一个元素,然后取组中的第一个元素

时间:2017-07-13 12:59:41

标签: python pandas pandas-groupby

从这里跟进问题:drop first and last row from within each group

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

e.g

      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

1 个答案:

答案 0 :(得分:2)

首先按get_level_values检查第一级的第一个值,然后使用groupby检查apply的第一个值 - tail的第一个组和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