Python:将函数应用于dataframe,并在dataframe中定义参数

Python:将函数应用于dataframe,并在dataframe中定义参数,python,pandas,Python,Pandas,我有一个标题为“Category”、“Factor1”、“Factor2”、“Factor3”、“Factor4”、“usefactra”、“UseFactorB”的数据框架 “UseFactorA”和“UseFactorB”的值是字符串['Factor1'、'Factor2'、'Factor3'、'Factor4']中的一个,根据“类别”中的值键入 我想生成一列“Result”,它等于dataframe[usefactra]/dataframe[usefactrb] 以下面的数据帧为例: [C

我有一个标题为“Category”、“Factor1”、“Factor2”、“Factor3”、“Factor4”、“usefactra”、“UseFactorB”的数据框架

“UseFactorA”和“UseFactorB”的值是字符串['Factor1'、'Factor2'、'Factor3'、'Factor4']中的一个,根据“类别”中的值键入

我想生成一列“Result”,它等于dataframe[usefactra]/dataframe[usefactrb]

以下面的数据帧为例:

[Category] [Factor1] [Factor2] [Factor3] [Factor4] [useFactor1] [useFactor2]
     A         1        2         5           8     'Factor1'    'Factor3'
     B         2        7         4           2     'Factor3'    'Factor1'
“结果”系列应为[2、.2]

但是,我不知道如何将useFactor1和useFactor2的值输入到索引中来实现这一点——如果要使用的列是固定的,我只会给出

df['Result'] = df['Factor1']/df['Factor2']
然而,当我试图给予

df['Results'] = df[df['useFactorA']]/df[df['useFactorB']]
我得到了错误

ValueError: Wrong number of items passed 3842, placement implies 1

是否有一种方法可以完成我在这里尝试的工作?

可能不是最漂亮的解决方案(因为iterrows),但我想到的是迭代一组因子,并在每个索引处设置“结果”值:

for i, factors in df[['UseFactorA', 'UseFactorB']].iterrows():
    df.loc[i, 'Result'] = df[factors['UseFactorA']] / df[factors['UseFactorB']]
编辑:

另一种选择:

def factor_calc_for_row(row):
    factorA = row['UseFactorA']
    factorB = row['UseFactorB']
    return row[factorA] / row[factorB]

df['Result'] = df.apply(factor_calc_for_row, axis=1)

可能不是最漂亮的解决方案(因为iterrows),但我想到的是迭代因子集并在每个索引处设置“Result”值:

for i, factors in df[['UseFactorA', 'UseFactorB']].iterrows():
    df.loc[i, 'Result'] = df[factors['UseFactorA']] / df[factors['UseFactorB']]
编辑:

另一种选择:

def factor_calc_for_row(row):
    factorA = row['UseFactorA']
    factorB = row['UseFactorB']
    return row[factorA] / row[factorB]

df['Result'] = df.apply(factor_calc_for_row, axis=1)
这是一条航线:

df['Results'] = [df[df['UseFactorA'][x]][x]/df[df['UseFactorB'][x]][x] for x in range(len(df))]
其工作原理是:

df[df['UseFactorA']]
返回一个数据帧

df[df['UseFactorA'][x]]
返回一个序列

df[df['UseFactorA'][x]][x]
从序列中提取一个值。

这是一个线性:

df['Results'] = [df[df['UseFactorA'][x]][x]/df[df['UseFactorB'][x]][x] for x in range(len(df))]
其工作原理是:

df[df['UseFactorA']]
返回一个数据帧

df[df['UseFactorA'][x]]
返回一个序列

df[df['UseFactorA'][x]][x]

从序列中提取单个值。

函数工作得非常完美,非常简单!我尝试了类似的方法,但忽略了axis=1参数——非常感谢。函数工作得非常完美,非常简单!我尝试了类似的方法,但忽略了axis=1参数——非常感谢。