【问题标题】:While Loop does not break and runs infinitely (Python)虽然循环不会中断并无限运行(Python)
【发布时间】:2020-03-17 07:59:21
【问题描述】:

我从时间序列中创建了一个数据框(布尔值)(如果值高于 x,则在某个日期为真,如果值低于 x,则为假)。我试图循环进入这个数据框——每当我遇到一个真值时,我都想更新计数器;如果为假,我想打破并打印更新后的计数器。 看起来像这样,但是 while 循环并没有中断——关于我在这里缺少什么的任何想法?提前致谢

k=0
dataa='2019-11-01'
for index in df_resz[dataa:].iterrows():
    while (df_resz.loc[dataa,'bool_resz']==True):
            k=k+1
    else:
        break
print (k)

【问题讨论】:

  • 请标记您使用的语言以获得您需要的适当帮助(您可以点击edit添加标记)
  • 当你进入while 循环后,为什么df_resz.loc[dataa,'bool_resz'] 会从True 变为False?此外,您的break 语句在技术上将结束for 循环,如果它曾经到达,那么为什么要以for 循环开头???
  • 有什么建议可以实现我的想法吗?谢谢
  • @NickParsons 感谢 Nick 这是 Python

标签: python pandas loops while-loop break


【解决方案1】:

如果我正确理解了您的问题,您的目标是迭代数据框列并对True 值求和,直到找到False。如果是这样:

>>> dict = {'value':[True, True, False, True]}
>>> df = pd.DataFrame(dict)
>>> df
   value
0   True
1   True
2  False
3   True
>>> counter = 0
>>> for i, j in df.iterrows():
...     if j.value == True:
...             counter += 1
...     else:
...             break
... 
>>> counter
2

【讨论】:

    【解决方案2】:

    让我先解释一下为什么while循环不会中断。您遍历数据,在第一个值为 true 时启动 while 循环,但在 while 循环中,此值不会被更新。因此,在无限更新 k 时,您的数据中的 True 值保持不变。

    要解决您的问题,只需使用 for 循环和 if 语句:

    test = pd.Dataframe({'value':[True, False, True]})
    k = 0
    
    for i in test.index():
        if test(i) == True:
            k += 1
    

    【讨论】:

    • @freddie_mercury 不客气。如果我的回答对你有帮助,你能考虑点赞吗? :)
    猜你喜欢
    • 2019-08-26
    • 2017-03-16
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2014-06-06
    • 2016-06-14
    相关资源
    最近更新 更多