Python:将函数应用于dataframe,并在dataframe中定义参数
我有一个标题为“Category”、“Factor1”、“Factor2”、“Factor3”、“Factor4”、“usefactra”、“UseFactorB”的数据框架 “UseFactorA”和“UseFactorB”的值是字符串['Factor1'、'Factor2'、'Factor3'、'Factor4']中的一个,根据“类别”中的值键入 我想生成一列“Result”,它等于dataframe[usefactra]/dataframe[usefactrb] 以下面的数据帧为例: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] [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参数——非常感谢。