Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在引用列时将函数按行应用于dataframe_Python_Pandas_Dataframe_Lambda - Fatal编程技术网

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运行您的代码。我得到了楠。你能检查一下吗?我的错,我没有指定用于计算总和的轴,谢谢你指出这一点