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我们的文件是关于拆包的。可能对你有帮助:)