在满足条件后,使用pandas删除组中的所有观察

时间:2013-12-05 00:03:48

标签: python r pandas

我有一个基本上是不平衡面板的pandas数据框。我想做的就是,对于每个小组,在满足条件后放弃所有观察。所以给定这个数据集:

person    period    hasTattoo
  A         1          N
  A         2          Y
  A         3          Y
  A         4          Y
  B         1          N
  B         2          N
  C         1          Y
  C         2          Y

我想得到这个:

person    period    hasTattoo
  A         1          N
  A         2          Y
  B         1          N
  B         2          N
  C         1          Y

我只包括不满足条件的期间,以及满足条件的期间,之后没有。在R中,我可以使用data.table。

dat[, subCount := 1:.N, by = c("person", "hasTattoo")]
dat <- dat[!(hasTattoo=="Y" & subCount > 1),]

1 个答案:

答案 0 :(得分:3)

对于pandas 0.12

def f(df):
    mask = np.cumsum((df.hasTattoo == "Y").values) <= 1
    return df[mask]

df.groupby("person").apply(f)

对于pandas 0.13

def f(df):
    mask = (df.hasTattoo == "Y").cumsum() <= 1
    return df[mask]

df.groupby("person").apply(f)