为了获得期望的结果,对if语句进行分层的正确方法是什么

时间:2019-06-01 17:48:45

标签: python pandas if-statement

[在此处输入图片描述]

图像2(结果) enter image description here

2我正在使用python + pandas在 csvs中进行数据操作。 示例#s

PL T
0.569999695

0.960002899

1.729999542

1.590000153

1.450000763

1.530002594 1.530002594

1.770000458

0.890003204

0.490001678

1.11000061

1.340000153

2.390003204 2.390003204

2.470001221

2.760002136

3.200000763

2.880001068

2.479999542 2.479999542

3.100002289

1.269996643

1.269996643

1.590000153

2.13999939

我过去曾经使用过if语句,但是这一语句非常具体,我似乎无法使语法正常工作。

如果您查看代码,则希望像这样计算列“ T” 之前的代码已经在该行中填充了一些数字,其余的为空白。

假设工作代码将遍历t列中的行。

第一行大部分为空白,因此它将跳过那些行,直到命中包含数字的行。 if(df['T'].iat[x-1] != "")

一旦在行中打了一个数字,脚本将检查逻辑(如果它旁边的行中的单元格大于其上方的单元格)(如果

df['PL'].iat[x] > df['PL'].iat[x-1]

如果该逻辑为真,则将其旁边的单元格打印到该列中。 df['T'].iat[x] = df['PL'].iat[x] 如果逻辑为假,则该单元格保持空白

我认为真正的问题是在此步骤之后如何迭代。现在,我认为它可以返回并再次检查最后一个if语句,但是我希望它为每一行遍历所有这些语句。

它应该阅读上面的列以查看它是否为空白或已填充,然后再次通过if语句,仅在满足所有条件时才打印一个数字。

我尝试了多种安排以及使用和/或声明。我似乎无法获得正确的结果。




import pandas as pd
import csv

df=pd.read_csv(filename)

len1 = len(df)

for x in range(len3): 

       if (df['T'].iat[x-1] != ""):

                if(df['T'].iat[x] == ""):

                    if (df['PL'].iat[x] > df['PL'].iat[x-1]):  

                        df['T'].iat[x] = df['PL'].iat[x]

该代码不显示任何错误消息,但是打印的结果不正确。如果我可以更好地解释它,或者任何人有任何想法,请告诉我。谢谢!

3 个答案:

答案 0 :(得分:0)

什么是df? 如果df是一个字典,如2个元素(T和PL)的对象,则len(df)将返回2。

也许您是指len(df["T"])len(df["PL"])

答案 1 :(得分:0)

您的第一个setState(() { steps[steps.keys.elementAt(/*checkbox index*/)] = true; }); 语句在找到一个空单元格之前不会跳过行-您的第二个if语句会这样做。我认为您的第一条if语句将导致您在检查第一行时失败。

尝试删除第一个if。如果那行不通,也尝试删除其他if,看看是否能够使用if设置任何值-可能是熊猫有单独的方法来设置值而不是得到它们。

答案 2 :(得分:0)

df.loc[((df['T'] > df['T'].shift(-1)) & (df['T'] != df['PL'])), 'PL'] = df['T']

IIUC,这应该做您想要的。