我想使用熊貓和statsmodels擬合數據框子集上的線性模型並返回預測值。但是,我很難找出適合使用的正確的熊貓成語。這裏是我想要做的事:熊貓可以將DataFrame轉換爲Series嗎?
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)
這引起以下錯誤:
---------------------------------------------------------------------------
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)
該錯誤是有道理的,我認爲.transform
想要一個數據幀映射到數據幀。但是有沒有辦法在DataFrame上執行groupby操作,將每個塊傳遞給一個函數,將其減少爲一個Series(具有相同的索引),然後將所得到的Series組合成可以插入原始數據框的東西?
有趣的是,這不適用於seaborn tips數據集,因爲涉及'day'是一個分類對象的錯誤。我想知道這是否是熊貓中的一個錯誤。 – mwaskom
熊貓大師作品。 Categoricals沒有連接/連接標誌的錯誤。 – TomAugspurger
很酷。 @TomAugspurger,你會說這是在熊貓中做到這一點最習慣的方式嗎?如果是的話,我會標記正確的。 – mwaskom