我正在寻找一种更快的方法,将值应用于数据帧中的列。该值基于第一列和第二列中的两个True and 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为True,则数字需要返回到1。如果check2为true,则需要向数字中添加1。否则数字保持不变。你知道吗
当前的代码是好的,但它需要太长的时间,因为我需要应用到一个数据帧约70.000行。我很肯定它可以改进(我猜是使用apply函数,但我不确定)。
有什么想法吗?你知道吗
您希望使用前一行的值来迭代数据帧。在这种情况下,最有效的方法是直接迭代底层numpy数组:
这很好,因为numpy数组是可变类型,所以更改会反映在数据帧中。你知道吗
Timeit说这个速度是@Chris的原始解决方案的两倍,在@Dan改进后仍然是原来的1.5倍。你知道吗
使用
pandas.DataFrame.groupby.cumsum
:或者@丹的建议:
输出:
相关问题 更多 >
编程相关推荐