Python 从数据帧中的每个组中删除特定的行集

Python 从数据帧中的每个组中删除特定的行集,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有一个数据框,如下所示: df=pd.DataFrame({“user_id”:['a','a','a','a','a','b','b','b'], “价值”:[20,17,15,10,8,18,18,17,13,10]}) 请注意,数据帧是按用户id然后按值降序排序的 对于每个用户id,我想删除第2行和第4行,以便输出如下 df=pd.DataFrame({“user_id”:['a','a','a','b','b',], “值”:[20,15,8,18,17,10]}) 受此启发,我尝

我有一个数据框,如下所示:

df=pd.DataFrame({“user_id”:['a','a','a','a','a','b','b','b'],
“价值”:[20,17,15,10,8,18,18,17,13,10]})
请注意,数据帧是按用户id然后按值降序排序的

对于每个用户id,我想删除第2行和第4行,以便输出如下

df=pd.DataFrame({“user_id”:['a','a','a','b','b',],
“值”:[20,15,8,18,17,10]})
受此启发,我尝试了以下方法:

def drop_行(数据帧):
pos=[1,3]
返回dataframe.drop(dataframe.index[pos],inplace=True)
df.groupby('user\u id')。应用(删除行)
但是得到了这个“索引2超出了大小为0的轴0的界限”


有人能解释一下为什么这不起作用,我应该怎么做?此外,鉴于数据集非常庞大,一种有效的解决方案将非常有用。非常感谢。

您可以使用
groupby+cumcount
获取每个组中的行数,然后检查行是否在
要删除的列表中

to_del = [2,4]
df[~df.groupby('user_id').cumcount().add(1).isin(to_del)]


太棒了,我在想是否还有其他方法可以做到这一点,如果不使用因式分解和应用代理键,我想不出其他方法。@Manakin我也很想知道:)
  user_id  value
0       a     20
2       a     15
4       a      8
5       b     18
7       b     17
9       b     10