如何根据特定区间条件在pandas数据框列中设置值而不重复?
我需要创建一个数据框,要求如下:
- 当条件是 A 时,输出为 True
- 在输出为 True 的下一行开始的三行(即使条件是 A,输出也要为 None)
原始数据框:
条件 |
---|
A |
A |
B |
A |
B |
A |
B |
期望的输出:
条件 | 输出 |
---|---|
A | True |
B | None |
A | None |
B | None |
A | True |
B | None |
A | None |
B | None |
这个可以通过向量化的方法实现吗,而不需要使用循环?谢谢!
2 个回答
0
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。
比如,有人可能在使用某个特定的框架时,发现它的某些功能没有按预期工作。这种情况通常需要我们仔细检查代码,看看是不是哪里出错了,或者是否有遗漏的步骤。
此外,社区中的其他开发者也会分享他们的经验和解决方案,这对我们来说是非常宝贵的资源。通过阅读这些讨论,我们可以学到很多实用的技巧,帮助我们更好地理解和解决问题。
总之,编程的学习过程就是不断尝试和解决问题的过程,遇到困难时不要气馁,积极寻求帮助和资源,才能不断进步。
df.loc[df['Condition'] == 'A','Result'] = 'True'
df.loc[df['Condition'] == 'B','Result'] = 'None'
2
这个操作无法用向量化的方式来处理,因为它本身就是一个需要反复执行的过程。你必须使用循环(不过你可以通过 numba 来提高它的效率):
from numba import jit
@jit(nopython=True)
def f(s, delay=3):
out = []
wait = 0 # default waiting time: 0
for v in s:
if v and not wait: # if True and no wait
out.append(True) # then it's a True
wait = delay # set to wait the next "delay" steps
else:
out.append(None) # else it's a None
if wait:
wait -= 1 # decrement waiting time
return out
df['Output'] = f(df['Condition'].eq('A').to_numpy())
输出结果:
Condition Output
0 A True
1 B None
2 A None
3 B None
4 A True
5 B None
6 A None
7 B None