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

Posted

技术标签:

【中文标题】在引用列时将函数逐行应用于熊猫数据框【英文标题】:Apply function rowwise to pandas dataframe while referencing a column 【发布时间】:2020-12-02 04:38:05 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

div、pow 和 sum 的组合可以解决这个问题:

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

【讨论】:

【参考方案2】:

你可以的

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

【讨论】:

我正在使用 Pandas 1.0.0 运行您的代码。我得到了南。你能查一下吗? 我的错,我没有指定用于计算总和的轴,谢谢指出

以上是关于在引用列时将函数逐行应用于熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何一次将函数应用于熊猫数据框中的多个列

如何将自定义函数应用于每行的熊猫数据框[重复]

将函数应用于熊猫中数据框的每一列

使用其他行中的值将函数应用于熊猫数据框行

如何在熊猫数据框中创建滑动窗口并应用函数

如何在熊猫数据框中使用应用时创建列时间戳?