2013-02-08 42 views
5

Tôi muốn áp dụng một scipy.stats.linregress trong Pandas ByGroup. Tôi đã nhìn qua tài liệu nhưng tất cả tôi có thể thấy là làm thế nào để áp dụng một cái gì đó cho một cột duy nhất nhưLàm thế nào để áp dụng linregress trong Pandas bygroup

grouped.agg(np.sum) 

hoặc một chức năng như

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

Nhưng làm thế nào để áp dụng một linregress trong đó có hai đầu vào X và Y?

Trả lời

4

Chức năng linregress, cũng như nhiều hàm scipy/numpy khác, chấp nhận "giống như mảng" X và Y, cả Series và DataFrame đều có thể đủ điều kiện.

Ví dụ:

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) 

Trong thực tế, có thể sử dụng scipy (và NumPy) chức năng là một trong những tính năng gấu trúc kẻ giết người!

Vì vậy, nếu bạn có một DataFrame bạn có thể sử dụng linregress trên các cột của nó (mà là Series):

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

và nếu sử dụng một groupby bạn có thể tương tự apply (cho mỗi nhóm):

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

Cảm ơn Andy, Có, nó có thể chấp nhận nó. Câu hỏi đặt ra là làm thế nào để làm điều đó BYGROUP. Ví dụ tôi có datetime mà tôi đã GROUPED thành Năm và tháng. Tôi muốn làm hồi quy tuyến tính cho mỗi nhóm sau đó trả về các giá trị từ hồi quy lin. Ngoài ra tôi có một DataFram vì vậy làm thế nào tôi có thể áp dụng mà sử dụng hai cột trong DF? Cảm ơn Jason – user1911866

+0

@ user1911866 được cập nhật với những điều này :) Chúc bạn may mắn. –

+0

@ user1911866 cũng xem [câu hỏi này và câu trả lời của nó] (http://stackoverflow.com/questions/12410438/how-to-use-pandas-groupby-apply-without-adding-an-extra-index). –

Các vấn đề liên quan