我有一个50列和2000多行数据的数据帧。我基本上想要逐行遍历每一列,并检查列中的值是否大于10,然后才会小于-10。如果是这样,请迭代计数器并转到下一列。
for row in data2.transpose().iterrows():
if row > 10:
countTP = countTP + 1
break
if row < -10:
countSL = countSL + 1
break
print countTP, countSL
Out: 1 0
至少有一半的列应该迭代计数器(我相信答案应该是35 15)感谢任何帮助!
答案 0 :(得分:1)
您似乎对自己想要做的事感到困惑。
.iterrows()
给你一个元组。因此,row
实际上是tuple
形式的(column_name, Series)
。 元组总是大于整数。例如,阅读this one。因此,row > 10
始终为True
,row<-10
始终为False
。row > 10
评估True
及其break
,您就可以立即完成。没有更多的循环,也没有更多的检查(也许你在考虑continue
,但行式比较不能按预期工作。)这就是为什么你总是得到countTP=1
和countSL=0
。< / LI>
醇>
你真正想要的是类似下面的嵌套循环。 (有人可能会说这很慢,而且矢量化是首选。但这是为了清晰,对于2000 + 50的数据帧,这不是太慢。)
countTP = countSL = 0
for col_name in data2:
for row in data2[col_name]:
if row > 10:
countTP = countTP + 1
break #Here we want to 'break' out of the inner loop but continue the outer loop
if row < -10:
countSL = countSL + 1
break
print countTP, countSL