如何将函数应用于数据框中的所有列并在python中以数据框的形式获取输出

时间:2019-04-19 07:46:40

标签: python pandas dataframe iteration

我有两个函数进行一些计算并得出结果。现在,我可以将其应用到一列中,并以数据框的形式获取结果。 我需要知道如何将函数应用于数据框中的所有列,并以数据框的形式获取结果。

说我有一个如下所示的数据框,我需要在该数据框的每一列上应用该函数,并获得一个数据框,其结果与所有列相对应。

firstbin.rs

结果

secondbin.rs

3 个答案:

答案 0 :(得分:1)

这是一个简单的例子

df

    A   B   C   D
0  10  11  12  13
1  20  21  22  23
2  30  31  32  33
3  40  41  42  43

# Assume your user defined function is 
def mul(x, y):
  return x * y

将值相乘

假设您要将第一列“ A”乘以3

df['A'].apply(lambda x: mul(x,3))

0     30
1     60
2     90
3    120

现在,您想将mul函数应用于数据框的所有列并使用结果创建新的数据框

df1 = df.applymap(lambda x: mul(x, 3))

df1

     A    B    C    D
0   30   33   36   39
1   60   63   66   69
2   90   93   96   99
3  120  123  126  129

答案 1 :(得分:0)

pd.DataFrame对象也有自己的apply method

根据上面链接的文档中给出的示例:

>>> df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])
>>> df
   A  B
0  4  9
1  4  9
2  4  9
>>> df.apply(np.sqrt)
     A    B
0  2.0  3.0
1  2.0  3.0
2  2.0  3.0

结论:您应该可以将函数应用于整个数据框。

答案 2 :(得分:0)

这似乎是您要在输出中尝试做的事情:

df = pd.DataFrame(
    [[1456, 6744, 9876, 374, 65413, 1456],
     [654, 2314, 674654, 2156, 872, 6744],
     [875, 653, 36541, 345, 4963, 9876],
     [6875, 7401, 3654, 465, 3547, 374],
     [78654, 8662, 35, 6987, 6874, 65413],
     [658, 94512, 687, 489, 8756, 5854]],
    columns=list('ABCDEF'))

def fn(col):
    return col[:-2].values + col[1:-1].values

应用前面的答案中提到的功能:

>>> df.apply(fn)
        A   B   C   D   E   F
0   2110    9058    684530  2530    66285   8200
1   1529    2967    711195  2501    5835    16620
2   7750    8054    40195   810 8510    10250
3   85529   16063   3689    7452    10421   65787