【问题标题】:Multiple conditions in for-loopfor循环中的多个条件
【发布时间】:2021-06-09 19:21:56
【问题描述】:

我想遍历一个数据框以检查一个语句是否分层(在检查 elif 之前,我希望代码遍历所有 K 值,如果不满足,请检查 elif): 我有以下数据框:

z={'speed':[2.2,12.74,5.1,.91,8.9]}
data=pd.DataFrame(data=z)

我想选择速度小于 5 且前一个速度也小于 5 的行。如果不满足此语句,我希望代码找到速度小于 5 的第一个点(向后) 这是我写的代码,但它有语法错误,我不确定代码是否通过所有 k 来检查第一个语句,然后检查第二个语句以防第一个语句不满足:

for k in reversed(data.index[:-1]):
if (data['speed'][k]<5 and data['speed'][k-1]<5):
    print(k)
break
elif data['speed'][k]<5:
    print(k)
break

结果应该是 3,因为第一个语句不满足 谢谢你的帮助

【问题讨论】:

  • break 没有正确缩进。 elif 几乎无法访问。

标签: python pandas dataframe for-loop if-statement


【解决方案1】:

您的break 语句缩进不正确。代码总是在第一个break 处打破循环。 代码应该是这样的:

import pandas as pd
z={'speed':[2.2, 2.74, 5.1, 9.1, 0.5]}
data=pd.DataFrame(data=z)

found = 0

for k in range(len(data['speed']) - 1, 0, -1):
    if (data['speed'][k]<5 and data['speed'][k-1]<5):
       print(k)
       found = 1
       break
    
if found == 0:
    for k in range(len(data['speed']) - 1, -1, -1):
        if data['speed'][k]<5:
           print(k)
           break

【讨论】:

  • 谢谢。我还面临这个代码的另一个问题。首先,我希望代码检查所有 K 的第一个 if 语句,如果不满足则检查 elif。但是这段代码基本上检查每个 K 的第一个 if 语句,如果它不是真的检查 elif。但我想要的是检查所有k的第一个if,然后如果它不是真的检查elif。在这种情况下,你认为我能做什么?
  • 您能否为特定输入添加您想要的输出? @yosi
  • 当然。考虑这个输入:z={'speed':[2.2,2.74,5.1,9.1,0.5]} data=pd.DataFrame(data=z)。我想要显示与 2.74 相关的索引 1 的代码
  • 为什么你的代码应该显示索引 1?你能解释一下吗? @yosi
  • 是的。因此,我想以一种主要 if 语句查看 this 表达式 (data['speed'][k]
猜你喜欢
  • 2013-05-27
  • 2013-01-27
  • 2012-08-04
  • 2011-09-02
  • 1970-01-01
  • 2016-08-03
  • 2015-10-22
  • 2023-01-29
相关资源
最近更新 更多