【问题标题】:Python- Pandas, filter take last element in group, then first element in groupPython-熊猫,过滤器取组中的最后一个元素,然后取组中的第一个元素
【发布时间】:2017-07-13 12:59:40
【问题描述】:

从这里跟进问题:drop first and last row from within each 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

【问题讨论】:

  • 当你说“我想要这个”时,你的意思是你想放弃那些权利?
  • 是的,我想删除所有其他行。抱歉没有更清楚!
  • 您的第一个索引是否在列表中?还是它们是随机的?
  • 它们是随机的。

标签: python pandas pandas-groupby


【解决方案1】:

首先通过get_level_values检查第一级的第一个值,然后通过apply检查groupby - 通过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

【讨论】:

  • @dmin 这是一个更好的解决方案。 +1
猜你喜欢
  • 1970-01-01
  • 2013-12-01
  • 2017-01-27
  • 2012-07-17
  • 1970-01-01
  • 2012-04-21
  • 2011-09-09
  • 2016-08-26
  • 1970-01-01
相关资源
最近更新 更多