2016-05-17 86 views
0

我一直在尝试使用pandas groupby来分析数据,然后我在更新熊猫版本从0.15.0到0.18.1之前遇到了一个问题,这个问题之前并不存在。熊猫ValueError:函数不会减少

我想计算“等于”值为1(它只能取值0或1)的连续期数。我所定义的跟随着lambda函数,以及用于GROUPBY命令如下:

import pandas as pd 
    E = lambda x: np.sum(x.diff()==1) + x.head(1) 

    grouped = df.groupby(['run_']) 
    agg_data = grouped[['equality','avg_payoff']].mean() 
    agg_data['E'] = grouped.equality.agg(E) # number of "equality" epochs 

但接收到的错误消息的代码的最后一行:

ValueError: Function does not reduce 

它是奇怪的是此代码更新之前完全跑。这并不是我在科学计算软件包更新后遇到问题的第一次,这让我感到有点沮丧。有人能帮助解决这个问题吗?或者我必须回滚到旧版本...

+0

你介意展示一些你用这样我们就可以复制使用的数据的? – Stefan

回答

1

x.head(1)返回系列(带有一行但系列)。 你可以做一个愚蠢的解决方法是这样

E = lambda x: np.sum(x.diff()==1) + np.sum(x.head(1)) 

还是有点聪明

E = lambda x: np.sum(x.diff()==1) + x.iloc[0] 
+0

或x.head()。这些值可以保存对外部方法的调用,并且可能会针对该操作进行优化。 – Chris

+0

@Chris x.head()。值比x.iloc [0]更有效吗? – knagaev

+0

那么,从NDFrame的来源,熊猫的父类,https://github.com/pydata/pandas/blob/master/pandas/core/generic.py,.values返回熊猫使用的内部数组,( df._data)。在这种情况下,显然不是必然的结果,但是iloc通常会有更多的开销,因为.values只是复制您已经操作过的数据。 – Chris