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

2024-06-30 07:36:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,其标题为“Category”、“Factor1”、“Factor2”、“Factor3”、“Factor4”、“UseFactorA”、“UseFactorB”

“UseFactorA”和“UseFactorB”的值是字符串['Factor1'、'Factor2'、'Factor3'、'Factor4']之一,根据“Category”中的值设置了键

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

以下面的数据帧为例:

[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

有什么方法可以做我在这里尝试的事情吗


Tags: 数据字符串标题dataframedfresultcategoryfactor1
2条回答

这里有一条线:

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]

从序列中提取单个值

可能不是最漂亮的解决方案(因为有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)

相关问题 更多 >