【发布时间】:2015-04-24 00:53:44
【问题描述】:
有没有办法可以在numpy.array(或pandas.DataFrame)上使用像norm.cdf这样的scipy函数就地,使用numpy.apply、numpy.apply_along_axs的变体,等等?
背景是,我有一个 z-score 值表,我想将其转换为规范分布的 CDF 值。我目前正在为此使用来自scipy 的norm.cdf。
我目前正在处理具有非数字值的数据框。
Name Val1 Val2 Val3 Val4
0 A -1.540369 -0.077779 0.979606 -0.667112
1 B -0.787154 0.048412 0.775444 -0.510904
2 C -0.477234 0.414388 1.250544 -0.411658
3 D -1.430851 0.258759 1.247752 -0.883293
4 E -0.360181 0.485465 1.123589 -0.379157
(将Name 变量设为索引是一种解决方案,但在我的实际数据集中,名称不是字母字符。)
为了只修改数值数据,我使用了df._get_numeric_data() 一个私有函数,它返回一个包含数据帧数值数据的数据帧。但是,没有set 功能。因此,如果我调用
norm.cdf(df._get_numeric_data)
这不会改变df的原始数据。
我试图通过将norm.cdf 应用于数字数据框就地来规避这一点,因此这会改变我的原始数据集。
【问题讨论】:
-
您可以从
_get_numeric_data的索引中获取数字列,但关键是您必须分配回要覆盖的 df 列,以便您可以执行类似for col in df._get_numeric_data.index: df[col] = norm.cdf(df[col])的操作或类似的
标签: python pandas scipy vectorization