使用Pandas groupby计算许多坡度

sel*_*yth 1 pandas

DataFrame(MultiIndex)格式的一些说明性数据:

|entity| year |value| +------+------+-----+ | a | 1999 | 2 | | | 2004 | 5 | | b | 2003 | 3 | | | 2007 | 2 | | | 2014 | 7 |

我想使用计算的斜率scipy.stats.linregress为每个实体ab在上面的例子。我尝试groupby在第一列上使用,遵循split-apply-combine建议,但由于它Series期望值(ab)中的一个而显得有些问题,而我需要在右边的两列上进行操作。

通过R很容易做到这一点plyr,不确定如何在熊猫中处理它。

fix*_*xer 5

一个功能可以groupby与一个功能一起应用apply。在这种情况下传递的函数linregress。请看下面:

In [4]: x = pd.DataFrame({'entity':['a','a','b','b','b'],
                          'year':[1999,2004,2003,2007,2014],
                          'value':[2,5,3,2,7]})

In [5]: x
Out[5]: 
  entity  value  year
0      a      2  1999
1      a      5  2004
2      b      3  2003
3      b      2  2007
4      b      7  2014


In [6]: from scipy.stats import linregress

In [7]: x.groupby('entity').apply(lambda v: linregress(v.year, v.value)[0])
Out[7]: 
entity
a    0.600000
b    0.403226
Run Code Online (Sandbox Code Playgroud)