Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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_Pandas - Fatal编程技术网

Python 删除在第一个组之后出现的重复组

Python 删除在第一个组之后出现的重复组,python,pandas,Python,Pandas,我的数据框如下所示: index name value 0 John Foo 1 John Bar 2 John Bar 3 John Foo 4 Jane Foo 5 Jane Bar 6 Jane Bar 7 John Foo 8 John Bar 我正在尝试将所有出现在名称出现的第一组之后的John删除,以便数据如下所示: index

我的数据框如下所示:

index   name   value
0       John   Foo
1       John   Bar
2       John   Bar
3       John   Foo
4       Jane   Foo
5       Jane   Bar
6       Jane   Bar
7       John   Foo
8       John   Bar
我正在尝试将所有出现在名称出现的第一组之后的
John
删除,以便数据如下所示:

index   name   value
0       John   Foo
1       John   Bar
2       John   Bar
3       John   Foo
4       Jane   Foo
5       Jane   Bar
6       Jane   Bar

当然,使用
df.drop_duplicates(['name'])
只能为每个名称保留一行。我知道有办法通过拼凑循环来解决这个问题,但是有没有一种特定的方法来删除在特定值的连续行之后出现的重复值?

创建一个辅助列,
'ng'
,它定义了
名称的连续组,然后为每个名称只保留第一组:(图中左侧的“辅助对象”列)

df['ng'] = df.groupby(df.name.ne(df.name.shift(1)).cumsum()).ngroup()
df[df.groupby('name').ng.transform('min') == df.ng]

   name value  ng
0  John   Foo   0
1  John   Bar   0
2  John   Bar   0
3  John   Foo   0
4  Jane   Foo   1
5  Jane   Bar   1
6  Jane   Bar   1