根据条件将函数应用于数据框中的列
Applying a function to columns within a dataframe based on a condition
以下代码的目标是遍历 5 列数据,如果在 'condition' 列中满足条件,则将函数应用于列中的该行。
我有一个数据框,我在其中设置了一个列作为条件的结果:
def WanCon(y):
if (30 <= y <= 48):
return 1
else:
return 2
time = four70['WY WEEK']
Wandata = pd.DataFrame(time)
Wandata['Condition'] = list(map(WanCon,Wandata['WY WEEK']))
然后我将 5 列的值复制到新数据框中 Wandata
,其中对象 a-e 是我以下函数中的 x 值。
name = 'WANAP'
a = four40[name]
b = eight40[name]
c = four70[name]
d = eight70[name]
e = Historical[name]
Wandata[['440','840','470','870','Historical']] = [a,b,c,d,e]
Wandata.replace("",float('NaN'),inplace=True)
然后我有两个公式,我想根据上述条件应用于新添加的列,其中应用值为 1 Waneq1()
的条件中的任何行,否则应用 Waneq2()
:
def Waneq1(x):
return((model1.c[0]*x**3)+(model1.c[1]*x**2)+(model1.c[2]*x)+(model1.c[3]))
def Waneq2(x):
return((model2.c[0]*x**3)+(model2.c[1]*x**2)+(model2.c[2]*x)+(model2.c[3]))
for column in Wandata[['440','840','470','870','Historical']]:
if Wandata['Condition']==1:
Waneq1()
else:
Waneq2()
我是 python 的新手,这是我到过的最远的地方。我想知道是否有人知道实现此目标的更好方法,因为第三步对我来说相当具有挑战性,而且我遇到了障碍。
不清楚您具体要做什么(我们也不知道 four40
等对象是什么),但在 pandas dataframe
上应用条件的正确方法通常是:
wandata['output column'] = (model2.c[0]*x**3)+(model2.c[1]*x**2)+(model2.c[2]*x)+(model2.c[3]) # The default value of the column
wandata.loc[wandata['condition'] == 1, 'output columns'] = (model1.c[0]*x**3)+(model1.c[1]*x**2)+(model1.c[2]*x)+(model1.c[3]) # The value if the condition is true
以下代码的目标是遍历 5 列数据,如果在 'condition' 列中满足条件,则将函数应用于列中的该行。
我有一个数据框,我在其中设置了一个列作为条件的结果:
def WanCon(y):
if (30 <= y <= 48):
return 1
else:
return 2
time = four70['WY WEEK']
Wandata = pd.DataFrame(time)
Wandata['Condition'] = list(map(WanCon,Wandata['WY WEEK']))
然后我将 5 列的值复制到新数据框中 Wandata
,其中对象 a-e 是我以下函数中的 x 值。
name = 'WANAP'
a = four40[name]
b = eight40[name]
c = four70[name]
d = eight70[name]
e = Historical[name]
Wandata[['440','840','470','870','Historical']] = [a,b,c,d,e]
Wandata.replace("",float('NaN'),inplace=True)
然后我有两个公式,我想根据上述条件应用于新添加的列,其中应用值为 1 Waneq1()
的条件中的任何行,否则应用 Waneq2()
:
def Waneq1(x):
return((model1.c[0]*x**3)+(model1.c[1]*x**2)+(model1.c[2]*x)+(model1.c[3]))
def Waneq2(x):
return((model2.c[0]*x**3)+(model2.c[1]*x**2)+(model2.c[2]*x)+(model2.c[3]))
for column in Wandata[['440','840','470','870','Historical']]:
if Wandata['Condition']==1:
Waneq1()
else:
Waneq2()
我是 python 的新手,这是我到过的最远的地方。我想知道是否有人知道实现此目标的更好方法,因为第三步对我来说相当具有挑战性,而且我遇到了障碍。
不清楚您具体要做什么(我们也不知道 four40
等对象是什么),但在 pandas dataframe
上应用条件的正确方法通常是:
wandata['output column'] = (model2.c[0]*x**3)+(model2.c[1]*x**2)+(model2.c[2]*x)+(model2.c[3]) # The default value of the column
wandata.loc[wandata['condition'] == 1, 'output columns'] = (model1.c[0]*x**3)+(model1.c[1]*x**2)+(model1.c[2]*x)+(model1.c[3]) # The value if the condition is true