Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在满足条件后,使用熊猫放弃小组中的所有观察_Python_R_Pandas - Fatal编程技术网

Python 在满足条件后,使用熊猫放弃小组中的所有观察

Python 在满足条件后,使用熊猫放弃小组中的所有观察,python,r,pandas,Python,R,Pandas,我有一个熊猫数据框,它基本上是一个不平衡的面板。我想做的就是,对于每个小组,在满足条件后放弃所有观察结果。鉴于此数据集: person period hasTattoo A 1 N A 2 Y A 3 Y A 4 Y B 1 N B 2 N C

我有一个熊猫数据框,它基本上是一个不平衡的面板。我想做的就是,对于每个小组,在满足条件后放弃所有观察结果。鉴于此数据集:

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),]
dat[,subCount:=1.N,by=c(“人”,“有纹身”)]
dat 1),]
适用于熊猫0.12

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

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

mask=np.cumsum((df.has纹身==“Y”).values)Huzzah!谢谢,谢谢。很抱歉问这个愚蠢的问题,但是什么是.values方法?
.values
获取原始的ndarray值,我使用这个方法是因为我的pandas版本(0.12)中有一些无法使用cumsum bool系列的bug。这在0.13中是固定的,因此您可以使用Series对象的
.cumsum()
方法。没有累加或in?
def f(df):
    mask = (df.hasTattoo == "Y").cumsum() <= 1
    return df[mask]

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