我想创建一个to列,它基于if语句在同一行中的值之间创建一个值,如果需要,在上面的行中创建一个值。
我有一个常数a和df
A = 0.5
FID_1 b c d e
75907 nan 33021647.00 27014.12 27014.12 1.00
75858 159510.00 32888862.00 16532.64 28797.05 0.57
75859 159510.00 32888862.00 12264.41 28797.05 0.43
75795 nan 32869718.00 24218.16 24218.16 1.00
75518 nan 32574894.00 13304.45 13304.45 1.00
我想创建另一个名为f
的列,它将告诉我e
中的值是否大于b
中给定值的值。如果正确,则值为1。你知道吗
上述df示例:
FID_1 b c d e f
75907 nan 33021647.00 27014.12 27014.12 1.00 1
75858 159510.00 32888862.00 16532.64 28797.05 0.57 1
75859 159510.00 32888862.00 12264.41 28797.05 0.43 0
75795 nan 32869718.00 24218.16 24218.16 1.00 1
75518 nan 32574894.00 13304.45 13304.45 1.00 1
更棘手的是,如果我将A
的值更改为0.6
。在这种情况下,我想查看b
中的每个数字,如果b
中的值的第一行的e
中的值大于A
,如果不是,我想查看e
中的值的相同值的第二行sum
,并检查它是否大于a。具有A=0.6
的df
如下所示:
FID_1 b c d e f
75907 nan 33021647.00 27014.12 27014.12 1.00 1
75858 159510.00 32888862.00 16532.64 28797.05 0.57 0
75859 159510.00 32888862.00 12264.41 28797.05 0.43 1
75795 nan 32869718.00 24218.16 24218.16 1.00 1
75518 nan 32574894.00 13304.45 13304.45 1.00 1
在这种情况下,代码将df的第三行中的0.57和0.43相加。你知道吗
如果不是这样的话,代码会转到第三,第四,。。。在b
中具有相同值的行-如果它甚至存在。你知道吗
这是创建e
列的代码
df['e'] = df.apply(lambda row: row.c / row.d, axis=1)
我对f
列尝试了类似的方法,但是我不知道如何在相同的代码中输入if statement
。你知道吗
这是我的解决方案的开始:
def STAcondition (row):
if row['e'] > A :
return 0
if row['e'] < A :
return 1
return 'Other'
df['f'] = df.apply (lambda row: STAcondition (row),axis=1)
也许可以尝试多步创建f。 如果我理解正确,您的伪算法应该如下所示:
以下是我起草的:
希望有帮助!你知道吗
相关问题 更多 >
编程相关推荐