如何将自定义函数应用于pandas中数据框的每一列?

时间:2018-10-05 15:57:29

标签: python pandas function

我有一个数据框,我想创建一个新的数据框 通过应用自定义函数创建的[将整个列作为输入] 到此数据帧的每一列。 我该怎么办?

编辑: 让我澄清一下这个问题。 这是我的数据框和功能。

import pandas as pd
import numpy as np

cor_df = pd.DataFrame({'A':[0.345, 0.985, 0.912, 0.645, 0.885, 0.121],
                       'B':[0.475, 0.502, 0.312, 0.231, 0.450, 0.234],
                       'C':[0.098, 0.534, 0.125, 0.984, 0.236, 0.734],
                       'D':[0.345, 0.467, 0.935, 0.074, 0.623, 0.469]})

def rtoz(r):
    z = 0.5 * np.log((1. + r) / (1. - r));
    return z

,我想通过将此函数应用于此数据框的每一列来创建一个新的数据框。 我该怎么办?

2 个答案:

答案 0 :(得分:0)

应用于每个值的大多数常用数学运算都是矢量化的。在这种情况下,不需要熊猫数据框。

以下每个将给出相同的结果。前两个给出了提供行和列标签的数据帧,而最后一个给出了NumPy数组。作为一种折衷,如果您需要性能和标签,则中间选项可能会满足您的需求。

%timeit rtoz(df)                                           # 1.21 ms per loop
%timeit pd.DataFrame(rtoz(df.values), columns=df.columns)  # 180 µs per loop
%timeit rtoz(df.values)                                    # 33.7 µs per loop

答案 1 :(得分:0)

我在this post的帮助下找到了所需的解决方案

import pandas as pd
import numpy as np

cor_df = pd.DataFrame({'A':[0.345, 0.985, 0.912, 0.645, 0.885, 0.121],
                       'B':[0.475, 0.502, 0.312, 0.231, 0.450, 0.234],
                       'C':[0.098, 0.534, 0.125, 0.984, 0.236, 0.734],
                       'D':[0.345, 0.467, 0.935, 0.074, 0.623, 0.469]})

def rtoz(r):
    z = 0.5 * np.log((1. + r) / (1. - r));
    return z

rtoz_df = pd.DataFrame() # new data frame to store r to z transformed values
cols = cor_df.columns
rtoz_df[cols] = cor_df[cols].apply(rtoz)