我想创建到列,该列基于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
中的值是否大于A(对于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
并且如果不是,我想在sum
中查找与值e
相同的第二行,并检查它是否大于A。{{1} }}如下:
df
在这种情况下,代码将df第三行中的0.57和0.43相加。
如果不是这种情况,则代码将查找A=0.6
中相同值的第三,第四,...行-甚至存在。
这是用于创建 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
列的代码
b
我为e
列尝试了类似的方法,但是我不知道如何在同一代码中输入df['e'] = df.apply(lambda row: row.c / row.d, axis=1)
。
这是我的解决方案的开始:
f
答案 0 :(得分:1)
也许尝试分多个步骤创建f。 如果我理解正确,您的伪算法应如下所示:
这是我写的东西:
import pandas as pd
import numpy.random as npr
import numpy as np
# Dummy data
dfInit = {
'FID_1':npr.randint(0,10,10),
'b':npr.randint(0,10,10),
'c':npr.randint(0,10,10),
'd':npr.randint(0,10,10),
'e':npr.randint(0,10,10)
}
dfIndex = np.arange(0,10)
df = pd.DataFrame(data=dfInit, index=dfIndex)
# Algo
df['f'] = np.zeros(10)
A = 6
def letsMakeAnF(value):
# check if value is in b
if value in df['b'].unique():
occurrenceMatch = df.loc[df['b'] == value,:]
else:
print('value not in b series')
return
if occurrenceMatch['e'].iloc[0] > A:
df['f'].ix[occurrenceMatch.index[0]] == 1
else:
if np.sum(occurrenceMatch['b']) > A:
df['f'].ix[occurrenceMatch.index[-1]] = 1
#Generate random 'wanted' values
values = [npr.randint(0, 10) for x in range(10)]
#Iterate over the values and modify the DF. Note that in this case
#df is a global variable
for value in values:
letsMakeAnF(value)
希望有帮助!