基本上,我试图使用用户定义的函数来计算每个数据帧中一行的值,并将其提供给新的ABCD列。
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?
答案 0 :(得分:2)
在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)
注意:
沿DataFrame的轴(列或行)应用函数:
传递给函数的对象是Series对象,其索引为 DataFrame的索引(axis = 0)或DataFrame的列 (轴= 1)。默认情况下(result_type = None),最终的返回类型为 从应用函数的返回类型推断。否则 取决于result_type参数。
答案 1 :(得分:0)
在pandas.DataFrame.apply
上与axis=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