2013-02-08 69 views
5

我想在Pandas ByGroup中应用scipy.stats.linregress。我已通过的文档看了,但我能看到的是怎样的东西应用到单个列像如何在大熊猫中应用linregress

grouped.agg(np.sum) 

或类似

grouped.agg('D' : lambda x: np.std(x, ddof=1)) 

功能,但我怎么应用它有两个输入的linregress X和Y?

回答

4

linregress函数以及许多其他scipy/numpy函数接受“类似数组的”X和Y,Series和DataFrame都可以使用。

例如:

from scipy.stats import linregress 
X = pd.Series(np.arange(10)) 
Y = pd.Series(np.arange(10)) 

In [4]: linregress(X, Y) 
Out[4]: (1.0, 0.0, 1.0, 4.3749999999999517e-80, 0.0) 

事实上,能够使用SciPy的(和numpy的)功能是大熊猫杀手锏之一!使用GROUPBY你同样可以apply(每个组)

linregress(df['col_X'], df['col_Y']) 

,如果:

所以,如果你有一个数据帧就可以使用linregress在其列(这是系列)

grouped.apply(lambda x: linregress(x['col_X'], x['col_Y'])) 
+0

谢谢安迪,是的,它可以接受它。问题是如何去做BYPOUP。例如,我有日期时间,我已经GROUPED到年和月。我想为每个组做线性回归,然后从lin回归中返回值。另外我有一个DataFram,所以我怎样才能在DF中使用两列?谢谢杰森 – user1911866 2013-02-10 09:37:25

+0

@ user1911866更新了这些:)祝你好运。 – 2013-02-10 10:05:19

+0

@ user1911866也请参阅[此问题及其答案](http://stackoverflow.com/questions/12410438/how-to-use-pandas-groupby-apply-without-adding-an-extra-index)。 – 2013-02-10 19:31:54