gpt4 book ai didi

python - pandas groupby 可以将 DataFrame 转换为 Series 吗?

转载 作者:太空狗 更新时间:2023-10-30 01:28:21 25 4
gpt4 key购买 nike

我想使用 pandas 和 statsmodels 在数据帧的子集上拟合线性模型并返回预测值。但是,我无法找出正确的 pandas 习语来使用。这是我正在尝试做的事情:

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 映射到 DataFrame。但是有没有办法对 DataFrame 进行 groupby 操作,将每个 block 传递给一个函数,将其缩减为一个 Series(具有相同的索引),然后将生成的 Series 组合成可以插入到原始 DataFrame 中的东西?

最佳答案

这里的顶部是相同的,我只是在使用玩具数据集 b/c 我在防火墙后面。

tips = pd.DataFrame({ 'day':list('MMMFFF'), 'tip':range(6), 
'total_bill':[10,40,20,80,50,40] })

def fit_predict(df):
m = sm.ols("tip ~ total_bill", df).fit()
return pd.Series(m.predict(df), index=df.index)

如果将“转换”更改为“应用”,您将获得:

tips.groupby("day").apply(fit_predict)

day
F 3 2.923077
4 4.307692
5 4.769231
M 0 0.714286
1 1.357143
2 0.928571

这不是你想要的,但如果你降低 level=0,你可以按需要继续:

tips['predicted'] = tips.groupby("day").apply(fit_predict).reset_index(level=0,drop=True)

day tip total_bill predicted
0 M 0 10 0.714286
1 M 1 40 1.357143
2 M 2 20 0.928571
3 F 3 80 2.923077
4 F 4 50 4.307692
5 F 5 40 4.769231

关于python - pandas groupby 可以将 DataFrame 转换为 Series 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32657226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com