繁体   English   中英

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

[英]How to apply a custom function to every column of a dataframe in pandas?

我有一个数据框,我想创建一个新的数据框,该框是通过将自定义函数[将整个列作为输入]应用于此数据框的每一列而创建的。 我怎样才能做到这一点?

编辑:让我使问题更清楚。 这是我的数据框和功能。

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

我想通过将此函数应用于此数据框的每一列来创建一个新的数据框。 我怎样才能做到这一点?

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

以下每个将给出相同的结果。 前两个给出了提供行和列标签的数据帧,而最后一个给出了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

我在这篇文章的帮助下找到了我正在寻找的解决方案

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM