在每个分组中删除第一行和最后一行。

3
这是关于按组获取第一个和最后一个值的后续问题。
如何在每个组内删除第一行和最后一行?
我有这个df
df = pd.DataFrame(np.arange(20).reshape(10, -1),
                  [['a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'],
                   ['a', 'a', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']],
                  ['X', 'Y'])

df

我故意让第二行具有与第一行相同的索引值。我无法控制索引的唯一性。

      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 b   2.0   3
  c   4.0   5
b f  10.0  11

由于等于 'c' 和 'd' 的两个 0 级组都少于 3 行,因此应该删除所有行。
2个回答

5
我会运用类似于我在另一个问题中所使用的技术。
def first_last(df):
    return df.ix[1:-1]

df.groupby(level=0, group_keys=False).apply(first_last)

enter image description here


2
注意:在 pandas 版本 0.20.0 及以上版本中,ix 已经被弃用,建议使用 iloc 替代。
因此,应将 df.ix[1:-1] 替换为 df.iloc[1:-1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接