Python 将数据框中每行的函数添加到列表中

Python 将数据框中每行的函数添加到列表中,python,pandas,dataframe,Python,Pandas,Dataframe,基本上,我尝试使用一个用户定义的函数来计算每个数据帧中一行中的值,并将它们呈现给一个新列 dfx = pd.DataFrame({'A': [1,2,3,4,5], 'B': [10,20,30,40,50], 'C': [5,5,5,5,5], 'D' : [2,2,2,2,2]}) print(df) A B C D E(Desired) 0 1 10 5 2 1 2 20 5 2 2 3 30 5 2 3 4 40 5 2 4 5

基本上,我尝试使用一个用户定义的函数来计算每个数据帧中一行中的值,并将它们呈现给一个新列

dfx = pd.DataFrame({'A': [1,2,3,4,5], 'B': [10,20,30,40,50], 'C': 
[5,5,5,5,5], 'D' : [2,2,2,2,2]})
print(df)


   A   B  C  D  E(Desired)
0  1  10  5  2
1  2  20  5  2
2  3  30  5  2
3  4  40  5  2
4  5  50  5  2

def functionx(A,B,C,D):
    print( A * B + C / D)



dfx['ABCD'] = functionX

我尝试使用functionX,但它不起作用。如何将函数正确地传递给每一行,并生成一个列E作为结果

在DataFrame中添加一个新列,该列的值基于其他列

您可以通过直接对所需的列元素执行所需的操作来实现这一点:

import pandas as pd

dfx = pd.DataFrame({'A': [1,2,3,4,5], 'B': [10,20,30,40,50], 'C':
[5,5,5,5,5], 'D' : [2,2,2,2,2]})
print(dfx)

dfx['E'] =  dfx['A'] * dfx['B'] + dfx['C'] / dfx['D']
print(dfx)
输出:

   A   B  C  D      E
0  1  10  5  2   12.5
1  2  20  5  2   42.5
2  3  30  5  2   92.5
3  4  40  5  2  162.5
4  5  50  5  2  252.5
或者您可以使用
DataFrame.apply()
函数来完成此任务:

dfx['E'] = dfx.apply(lambda row: row.A * row.B + row.C / row.D, axis = 1)
注:

沿数据框的轴(列或行)应用函数:

传递给函数的对象是索引为的系列对象 数据帧的索引(axis=0)或数据帧的列 (轴=1)。默认情况下(result_type=None),最终返回类型为 从应用函数的返回类型推断。否则, 取决于结果类型参数


在DataFrame中添加一个新列,其值基于其他列

您可以通过直接对所需的列元素执行所需的操作来实现这一点:

import pandas as pd

dfx = pd.DataFrame({'A': [1,2,3,4,5], 'B': [10,20,30,40,50], 'C':
[5,5,5,5,5], 'D' : [2,2,2,2,2]})
print(dfx)

dfx['E'] =  dfx['A'] * dfx['B'] + dfx['C'] / dfx['D']
print(dfx)
输出:

   A   B  C  D      E
0  1  10  5  2   12.5
1  2  20  5  2   42.5
2  3  30  5  2   92.5
3  4  40  5  2  162.5
4  5  50  5  2  252.5
或者您可以使用
DataFrame.apply()
函数来完成此任务:

dfx['E'] = dfx.apply(lambda row: row.A * row.B + row.C / row.D, axis = 1)
注:

沿数据框的轴(列或行)应用函数:

传递给函数的对象是索引为的系列对象 数据帧的索引(axis=0)或数据帧的列 (轴=1)。默认情况下(result_type=None),最终返回类型为 从应用函数的返回类型推断。否则, 取决于结果类型参数


使用pandas.DataFrame解包。在轴=1上应用:

dfx['E'] = dfx.apply(lambda x: functionx(*x), 1)
print(dfx)
输出:

   A   B  C  D      E
0  1  10  5  2   12.5
1  2  20  5  2   42.5
2  3  30  5  2   92.5
3  4  40  5  2  162.5
4  5  50  5  2  252.5

使用pandas.DataFrame解包。在轴=1上应用:

dfx['E'] = dfx.apply(lambda x: functionx(*x), 1)
print(dfx)
输出:

   A   B  C  D      E
0  1  10  5  2   12.5
1  2  20  5  2   42.5
2  3  30  5  2   92.5
3  4  40  5  2  162.5
4  5  50  5  2  252.5

你不需要函数。您可以在
dfx[“E”]=dfx.A*dfx.B+dfx.C/dfx.D
的列上直接应用该公式。但是,如果希望每行应用一个特定的函数行,请查看您不需要的函数。您可以在
dfx[“E”]=dfx.A*dfx.B+dfx.C/dfx.D
的列上直接应用该公式。但是,如果您希望每行应用一个特定的函数行,请查看函数中的
*
做了什么?@mohanys它将iterable解压,这样就不必执行
函数x(x[0],x[1],x[2],x[3])
。噢!没有意识到这一点,就是info@mohanys我们的文件是关于拆包的。可能对ya有帮助:)函数中的
*
做什么?@mohanys它解压iterable,这样就不必执行
函数x(x[0],x[1],x[2],x[3])
。哦!没有意识到这一点,就是info@mohanys我们的文件是关于拆包的。可能对你有帮助:)