gpt4 book ai didi

python - 删除特定列值第一次出现之后(并包括)的行

转载 作者:行者123 更新时间:2023-12-04 07:30:24 26 4
gpt4 key购买 nike

我有一个非常大的 pd.Dataframe 包含数百万条记录,其中 PIDSes_ID都是索引列,Var_3表示某个事件的发生。


PID
用户 ID
变量_1
变量_2
Var_3


001
001002003
0.70.80.9
0.50.40.3
010

002
004005006007008
0.80.70.80.20.8
0.20.10.70.20.2
00101


我想删除/过滤掉 session ,包括第一次出现 Var_3==1来自每个人(由 PID 索引)的记录。因此,提供的示例将导致:


PID
用户 ID
变量_1
变量_2
Var_3


001
001
0.7
0.5
0

002
004005
0.80.7
0.20.1
00


我可以迭代添加相关 session 和相应的 PID到一个新的数据帧,但考虑到当前数据帧的大小,这将非常耗时。实现这一目标的有效方法是什么?非常感谢!
更新情况:我发现很多行都有相同的 Ses_ID .如何删除(包括)第一次出现特定列值之后的 session ?因此,对于下面的示例,Ses_ID==005 的两行将被删除,因为事件 Var_3==1发生在本次 session 上。


PID
用户 ID
变量_1
变量_2
Var_3


001
001002003
0.70.80.9
0.50.40.3
010

002
009004004005005006007
0.10.80.80.70.80.20.8
0.30.10.20.10.70.20.2
0000101


应该转化为:


PID
用户 ID
变量_1
变量_2
Var_3


001
001
0.7
0.5
0

002
009004004
0.10.80.8
0.30.10.2
000

最佳答案

您可以尝试使用 bool 索引:

# assuming PID, Ses_ID are indices:
mask = df.groupby(level=0)["Var_3"].cumsum().eq(0)
print(df[mask])
打印:
            Var_1  Var_2  Var_3
PID Ses_ID
1 1 0.7 0.5 0
2 4 0.8 0.2 0
5 0.7 0.1 0

编辑:
g = df.groupby(level=0)
df["Var_3"] = g["Var_3"].transform(
lambda x: x.groupby(level=1).transform(sorted, reverse=True)
)
mask = g["Var_3"].cumsum().eq(0)
print(df[mask])
打印:
            Var_1  Var_2  Var_3
PID Ses_ID
1 1 0.7 0.5 0
2 4 0.8 0.2 0

关于python - 删除特定列值第一次出现之后(并包括)的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67963018/

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