这在某种程度上扩展了我以前的问题 python pandas rolling function with two arguments。在
如何按组执行相同的操作?假设下面的“C”列用于分组。在
我正在努力:
预期结果将是如下所示的数据帧:
我一直在尝试“通过索引”解决方法,如上面的链接所述,但这个案例的复杂性超出了我的能力:-(。这是一个有趣的例子,离我正在处理的不远,所以为了简单起见,我使用了随机生成的数据。在
rand = np.random.RandomState(1)
dff = pd.DataFrame({'A' : np.arange(20),
'B' : rand.randint(100, 120, 20),
'C' : rand.randint(0, 2, 20)})
def my_tau_indx(indx):
x = dff.iloc[indx, 0]
y = dff.iloc[indx, 1]
tau = sp.stats.mstats.kendalltau(x, y)[0]
return tau
dff['tau'] = dff.sort_values(['C', 'A']).groupby('C').rolling(window = 5).apply(my_tau_indx, args = ([dff.index.values]))
我做的每一个修复都会产生另一个错误。。。在
上面的问题已经由nickilmaveli解决了,它可以与numpy 1.11.0、pandas 0.18.1、scipy0.17.1和conda 4.1.4一起工作。它会生成一些警告,但会起作用。在
在我的另一台装有最新和最伟大的numpy 1.12.0、pandas 0.19.2、scipy 0.18.1、conda version 3.10.0和BLAS/LAPACK的另一台机器上,它不工作,我得到了下面的回溯。这似乎是版本相关,因为我升级了第一台机器,它也停止工作。。。以科学的名义。。。;—)
正如Nickil所说,这是由于numpy1.11和1.12之间的不兼容。降级纽比帮了忙。因为我在Windows上安装了BLAS/LAPACK,所以我从http://www.lfd.uci.edu/~gohlke/pythonlibs/安装了nump1.11.3+mkl。在
^{pr2}$最终检查:
一种实现方法是迭代每个组,并在每个组上使用
pd.rolling_apply
。在编辑:
^{pr2}$相关问题 更多 >
编程相关推荐