[英]How to apply a function to every value in a column in a pandas dataframe?
[英]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.