将数据框中的每行功能添加到列表中

时间:2019-08-23 09:38:45

标签: python pandas dataframe

基本上,我试图使用用户定义的函数来计算每个数据帧中一行的值,并将其提供给新的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?

2 个答案:

答案 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