gpt4 book ai didi

python - 从数据框中的每个组中删除特定的一组行

转载 作者:行者123 更新时间:2023-12-04 01:17:59 25 4
gpt4 key购买 nike

我有一个数据框如下:

df = pd.DataFrame({"user_id": ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b'],
"value": [20, 17,15, 10, 8 , 18, 18, 17, 13, 10]})

请注意,dataframe 按 user_id 然后 value 降序排序。

对于每个 user_id,我想删除第 2 行和第 4 行,这样输出看起来像

df = pd.DataFrame({"user_id": ['a', 'a', 'a', 'b', 'b', 'b',],
"value": [20, 15, 8 , 18, 17, 10]})

灵感来自 drop first and last row from within each group ,我尝试了以下方法:

def drop_rows(dataframe) : 
pos = [1,3]
return dataframe.drop(dataframe.index[pos], inplace=True)
df.groupby('user_id').apply(drop_rows)

但是得到这个“索引 2 超出了尺寸为 0 的轴 0 的范围”

有人可以解释为什么这不起作用以及我应该如何继续吗?此外,鉴于数据集非常庞大,一种有效的解决方案将很有帮助。非常感谢。

最佳答案

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

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

  user_id  value
0 a 20
2 a 15
4 a 8
5 b 18
7 b 17
9 b 10

关于python - 从数据框中的每个组中删除特定的一组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63018218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com