Python 在引用列时将函数按行应用于dataframe
我有这样一个熊猫数据框:Python 在引用列时将函数按行应用于dataframe,python,pandas,dataframe,lambda,Python,Pandas,Dataframe,Lambda,我有这样一个熊猫数据框: df=pd.DataFrame({'A':[2,3],'B':[1,2],'C':[0,1],'D':[1,0],'total':[4,6]}) A、B、C、D总计 0 2 1 0 1 4 1 3 2 1 0 6 我正在尝试执行行计算,并使用结果创建一个新列。计算方法是将每列ABCD除以总数,求平方,然后按行求和。这应该是结果(如果总数为0,则为0): A B C D总结果 0 2 1 0 1 4 0.375
df=pd.DataFrame({'A':[2,3],'B':[1,2],'C':[0,1],'D':[1,0],'total':[4,6]})
A、B、C、D总计
0 2 1 0 1 4
1 3 2 1 0 6
我正在尝试执行行计算,并使用结果创建一个新列。计算方法是将每列ABCD除以总数,求平方,然后按行求和。这应该是结果(如果总数为0,则为0):
A B C D总结果
0 2 1 0 1 4 0.375
1 3 2 1 0 6 0.389
这是我到目前为止尝试过的,但它始终返回0:
df['result']=df['A',B',C',D']].应用(λx:((x/df['total'])**2.sum(),轴=1)
我想问题在于lambda函数中的df['total'],因为如果我用一个数字替换它,它就可以正常工作。但我不知道如何解决这个问题。感谢您的建议。结合以下方法,可以解决此问题:
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)
我正在使用Pandas 1.0.0运行您的代码。我得到了楠。你能检查一下吗?我的错,我没有指定用于计算总和的轴,谢谢你指出这一点