Python:迭代DataFrame的条件语句

时间:2016-01-30 00:26:26

标签: python pandas dataframe

我有一个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)感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您似乎对自己想要做的事感到困惑。

  1. .iterrows()给你一个元组。因此,row实际上是tuple形式的(column_name, Series)元组总是大于整数。例如,阅读this one。因此,row > 10始终为Truerow<-10始终为False
  2. 进入循环后,row > 10评估True及其break,您就可以立即完成。没有更多的循环,也没有更多的检查(也许你在考虑continue,但行式比较不能按预期工作。)这就是为什么你总是得到countTP=1countSL=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