如何根据特定区间条件在pandas数据框列中设置值而不重复?

0 投票
2 回答
52 浏览
提问于 2025-04-14 17:59

我需要创建一个数据框,要求如下:

  1. 当条件是 A 时,输出为 True
  2. 在输出为 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

撰写回答