gpt4 book ai didi

python - 如何根据过滤条件有效地将列变为 0?

转载 作者:行者123 更新时间:2023-12-01 01:05:15 24 4
gpt4 key购买 nike

如标题所述,如何根据列列表将列转换为0。我需要在列表中的前 3 列匹配到 1 后将任何列转换为 0。

例如

list1 =["a","c","d","e","b"]

df=

    a   b   c   d   e
0 1 1 0 1 1
1 0 0 0 1 1
2 0 0 0 0 0
3 1 1 1 0 0
4 0 0 0 0 0
5 1 1 1 1 1

我想要的是:

    a   b   c   d   e
0 1 0 0 1 1
1 0 0 0 1 1
2 0 0 0 0 0
3 1 1 1 0 0
4 0 0 0 0 0
5 1 0 1 1 0

目前,我正在循环遍历每一行和列表。随着这个数据框变得越来越大,它会花费越来越长的时间,所以我想看看是否有一种有效的方法来做到这一点。

我当前的代码是:

a=np.random.randint(2, size=(6, 5))
df=pd.DataFrame(a,columns=["a","b",'c','d',"e"])
filterlist=["a","c",'d','e','b']

%%timeit
counter=1
for eachindex in df.index:
for item in filterlist:
if (df.iloc[eachindex][item])==1:
counter=counter+1
if counter>4:
df.loc[eachindex,item]=0
counter=1

时间是:

2.7 ms ± 60.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

最佳答案

您可以使用 reindexcumsum ,然后使用 mask 返回

df.mask(df.reindex(columns=filterlist).cumsum(1).gt(3),0)
Out[620]:
a b c d e
0 1 0 0 1 1
1 0 0 0 1 1
2 0 0 0 0 0
3 1 1 1 0 0
4 0 0 0 0 0
5 1 0 1 1 0

关于python - 如何根据过滤条件有效地将列变为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55420893/

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