我有一个基本上是不平衡面板的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),]
答案 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)