从每个组中删除第一行和最后一行

时间:2016-08-05 21:34:38

标签: python pandas group-by

这是get first and last values in a groupby

的后续问题

如何删除每组中的第一行和最后一行?

我有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

因为0级的两个组都等于' c'并且' d'如果少于3行,则应删除所有行。

2 个答案:

答案 0 :(得分:3)

我将类似的技巧应用于我对其他问题的处理方式:

def first_last(df):
    return df.ix[1:-1]

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

enter image description here

答案 1 :(得分:1)

注意:在pandas版本0.20.0及更高版本中,ix为deprecated,而且鼓励使用iloc。

因此df.ix[1:-1]应替换为df.iloc[1:-1]