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

2024-10-01 04:48:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

编辑: 让我把问题说得更清楚些。 这是我的数据帧和函数。在

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

我想创建一个新的数据框,把这个函数应用到这个数据框的每一列。 我该怎么做?在


Tags: 数据函数importnumpylog编辑dataframepandas
2条回答

应用于每个值的最常见的数学运算是可向量化的。在这种情况下,Pandas数据帧是不必要的。在

下面的每一个都会给出相同的结果。前两个提供了提供行和列标签的dataframe,最后一个给出了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

我在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)

相关问题 更多 >