在引用列的同时将函数逐行应用于熊猫数据框

问题描述

我有一个这样的熊猫数据框:

df = pd.DataFrame({'A': [2,3],'B': [1,2],'C': [0,1],'D': [1,0],'total': [4,6]})

   A  B  C  D  total
0  2  1  0  1      4
1  3  2  1  0      6

我正在尝试执行逐行计算并使用结果创建新列。计算方法是将每一列ABCD除以总数,将其平方,然后逐行求和。这应该是结果(如果总数为0,则为0):

   A  B  C  D  total  result
0  2  1  0  1      4   0.375
1  3  2  1  0      6   0.389

这是我到目前为止尝试过的方法,但它始终返回0:

df['result'] = df[['A','B','C','D']].apply(lambda x: ((x/df['total'])**2).sum(),axis=1)

我猜想问题出在lambda函数中的df['total']上,因为如果我将其替换为一个数字,它将很好地工作。我不知道该如何解决。感谢任何建议。

解决方法

divpowsum的组合可以解决此问题:

df["result"] = df.filter(regex="[^total]").div(df.total,axis=0).pow(2).sum(1)
df

A   B   C   D   total   result
0   2   1   0   1   4   0.375000
1   3   2   1   0   6   0.388889
,

你可以做

df['result'] = (df.loc[:,"A": 'D'].divide(df.total,axis=0) ** 2).sum(axis=1)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...