在引用列时将函数逐行应用于熊猫数据框
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 运行您的代码。我得到了南。你能查一下吗? 我的错,我没有指定用于计算总和的轴,谢谢指出以上是关于在引用列时将函数逐行应用于熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章