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