将函数应用于 Pandas 数据框中的每一行,并参考一列。

4

I have a pandas dataframe like this:

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'],如果我将其替换为数字,则代码可以正常工作。但我不知道如何解决这个问题。感谢任何建议。

2个回答

4

结合使用 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

4

你可以这样做

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

我正在使用Pandas 1.0.0运行您的代码,但是我得到了NAN。您能检查一下吗? - Ruthger Righart
我的错,我没有指明用于计算总和的轴,感谢您指出这一点。 - Ayoub ZAROU

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接