Tôi muốn sử dụng gấu trúc và mô hình thống kê để phù hợp với mô hình tuyến tính trên tập hợp con của một khung dữ liệu và trả về giá trị được dự đoán. Tuy nhiên, tôi đang gặp khó khăn trong việc tìm ra thành ngữ gấu trúc phù hợp để sử dụng. Dưới đây là những gì tôi đang cố gắng để làm:Nhóm gấu trúc có thể chuyển đổi một DataFrame thành một Series không?
import pandas as pd
import statsmodels.formula.api as sm
import seaborn as sns
tips = sns.load_dataset("tips")
def fit_predict(df):
m = sm.ols("tip ~ total_bill", df).fit()
return pd.Series(m.predict(df), index=df.index)
tips["predicted_tip"] = tips.groupby("day").transform(fit_predict)
Điều này đặt ra các lỗi sau:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-139-b3d2575e2def> in <module>()
----> 1 tips["predicted_tip"] = tips.groupby("day").transform(fit_predict)
/Users/mwaskom/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in transform(self, func, *args, **kwargs)
3033 return self._transform_general(func, *args, **kwargs)
3034 except:
-> 3035 return self._transform_general(func, *args, **kwargs)
3036
3037 # a reduction transform
/Users/mwaskom/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in _transform_general(self, func, *args, **kwargs)
2988 group.T.values[:] = res
2989 else:
-> 2990 group.values[:] = res
2991
2992 applied.append(group)
ValueError: could not broadcast input array from shape (62) into shape (62,6)
Các lỗi có ý nghĩa trong đó tôi nghĩ .transform
muốn ánh xạ một DataFrame đến một DataFrame. Nhưng có cách nào để thực hiện một hoạt động nhóm trên một DataFrame, chuyển từng đoạn vào một hàm làm giảm nó thành một Series (với cùng một chỉ mục), và sau đó kết hợp Series thành một thứ có thể được chèn vào khung dữ liệu gốc?
Thú vị, điều này không làm việc với tập dữ liệu lời khuyên seaborn vì một lỗi liên quan đến 'ngày' là một đối tượng phân loại. Tôi tự hỏi nếu đó là một lỗi trong gấu trúc. – mwaskom
Hoạt động trên tổng thể gấu trúc. Đã xảy ra lỗi với Danh mục không có cờ để tham gia/cuộc hội thoại. – TomAugspurger
Tuyệt. @TomAugspurger, bạn sẽ nói đây là cách thành ngữ nhất để làm điều này trong Pandas? Tôi sẽ đánh dấu đúng nếu có. – mwaskom