gpt4 book ai didi

python - 在不使用 for 循环的情况下将值应用于 DataFrame

转载 作者:太空宇宙 更新时间:2023-11-03 23:59:17 25 4
gpt4 key购买 nike

我正在寻找一种更快的方法来将值应用于 DataFrame 中的列。该值基于第一列和第二列中的两个 True 和 False 值。这是我目前的解决方案:

df['result'] = df.check1.astype(int)

for i in range(len(df)):
if df.result[i] != 1:
df.result[i] = df.result.shift(1)[i] + df.check2[i].astype(int)

产生这个结果:

    check1  check2  result
0 True False 1
1 False False 1
2 False False 1
3 False False 1
4 False False 1
5 False False 1
6 False True 2
7 False False 2
8 False True 3
9 False False 3
10 False True 4
11 False False 4
12 False True 5
13 False False 5
14 False True 6
15 False False 6
16 False True 7
17 False False 7
18 False False 7
19 False False 7
20 False True 8
21 False False 8
22 False True 9
23 True False 1
24 False False 1

因此第三列需要是一个基于其上一行中的值的数字。如果 check1 为真,则数字需要返回到 1。如果 check2 为真,则需要将数字加 1。否则数字保持不变。

当前的代码很好,但它花费的时间太长,因为我需要将它应用到一个数据帧上,大约。 70.000 行。我很确定它可以改进(我猜是使用 apply 函数,但我不确定)。
有什么想法吗?

最佳答案

使用pandas.DataFrame.groupby.cumsum:

import pandas as pd

df['result'] = df.groupby(df['check1'].cumsum())[['check1', 'check2']].cumsum().sum(1)

或者@Dan的建议:

df['result'] = df.groupby(df['check1'].cumsum())['check2'].cumsum().add(1)

输出:

    check1  check2  result
0 True False 1.0
1 False False 1.0
2 False False 1.0
3 False False 1.0
4 False False 1.0
5 False False 1.0
6 False True 2.0
7 False False 2.0
8 False True 3.0
9 False False 3.0
10 False True 4.0
11 False False 4.0
12 False True 5.0
13 False False 5.0
14 False True 6.0
15 False False 6.0
16 False True 7.0
17 False False 7.0
18 False False 7.0
19 False False 7.0
20 False True 8.0
21 False False 8.0
22 False True 9.0
23 True False 1.0
24 False False 1.0

关于python - 在不使用 for 循环的情况下将值应用于 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56275161/

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