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

2024-01-27

我想使用 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 操作,将每个块传递到一个函数中,将其缩减为一个 Series(具有相同的索引),然后将结果 Series 组合成可以插入到原始数据帧中的内容?


这里的顶部部分是相同的,我只是使用一个玩具数据集 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas groupby 可以将 DataFrame 转换为 Series 吗? 的相关文章

随机推荐

  • 在 Django 中通过哈希有效保存文件

    我正在开发一个 Django 项目 我希望用户能够做的是上传文件 通过表单 然后将文件本地保存到自定义路径并使用自定义文件名 其哈希值 我能想到的唯一解决方案是使用我正在使用的 FileField 的 upload to 参数 这意味着什么
  • 找不到与给定名称匹配的资源(在“title”处,值为“@string/action_settings”)

    所以我最近 就像今天最近 开始尝试在eclipse中工作 我一直在关注 Android 开发者初学者课程 到目前为止一切都很顺利 我已经开始构建一个简单的用户界面 http developer android com training ba
  • 无法找到软件包 openssl-dev

    我正在尝试使用 Ubuntu 18 04 在 Linux 上安装 ROOT CERN 软件包 每当我进入先决条件下载时 都使用以下命令 sudo apt get install dpkg dev cmake g gcc binutils l
  • 接口继承一致性

    首先看这段代码 class Program static void Main string args var x Base new Derived IMethod x DoWork Console ReadKey interface IMe
  • 背包0-1个定量

    我正在编写具有多个约束的背包 0 1 的变体 除了重量约束之外 我还有数量约束 但在本例中 我想解决背包问题 因为我的背包中需要恰好有 n 件物品 且重量小于或等于 W 目前正在为简单的 0 1 案例实现动态编程 ruby 解决方案 基于
  • 身份验证:JWT 使用与会话

    在身份验证等情况下 使用 JWT 相对于会话有什么优势 它是作为独立方法使用还是在会话中使用 JWT 本身并没有使用 会话 的优势 JWT 提供了一种在客户端维护会话状态的方法 而不是在服务器上进行维护 人们在问这个问题时通常的意思是 使用
  • file.slim.js 中的 slim 是什么

    请原谅我的无知 但我刚刚使用 npm 安装了 jQuery 并且在 jQuery 文件之间有一个名为jquery slim js 什么是slim 我知道min代表缩小但苗条对我来说是新的 顺便说一句我很确定slim不像min因为还有另一个文
  • Bash 条件:如何使用“and”表达式? (如果 [ ! -z $VAR && -e $VAR ])

    我想我不清楚如何进行 和 测试 我想确保存在一个可以很好地工作的论点 e VAR 但事实证明 在空字符串上也计算为 true 这是我不想要的 我如何将它们 和 在一起 或者是否有另一个一元测试可以实现我想要的 if z var e var
  • Julia 中的复制和深复制有什么区别?

    我试图理解之间的区别copy and deepcopy 在朱莉娅 根据我读到的内容朱莉娅文档 https docs julialang org en v1 base base Base copy这好像是deepcopy 复制这些值 然后创建
  • 适用于 iOS 的 Google 地图 API myLocationEnabled 无法正常工作

    我正在尝试使用 Google Maps API 但在获取用户位置时遇到问题 观察到的值似乎永远不会改变 因为observeValueForKeyPath 从未被调用 注意 我正在运行 Xcode 6 Beta 5 和 iOS 8 beta
  • 在 Swift 中使用 AWSTask 对象的正确方法是什么?

    您好 提前感谢您的宝贵时间 在我的代码中 我向 AWSSQS 发出各种请求 这些请求都返回 AWSTask 我发现使用这些 AWSTask 对象非常困难 同时还试图将特定于 AWS 的所有逻辑保留在单个类中 以便我可以在需要时轻松切换到不同
  • 应用程序根目录的默认路由

    我该如何告诉我的mvc 应用程序路由到特定Controller and Action当它们没有被指定时 调试时http localhost 54500 应该路由到http localhost 54500 Home Index 目前我有 ro
  • 在 Devise 中为用户手动登录时,如何将“记住我”设置为“是”?

    In Devise http github com plataformatec devise 我像这样登录我的用户 sign in and redirect user user 在默认登录页面中 有一个复选框可供用户选择 这样他们返回站点时
  • 如何在Android中打开现有的Fragment交易?

    如何在Android中打开现有的Fragment交易 是否用于将现有片段替换为操作栏中下拉列表中的新片段 以防万一这就是您所要求的 请更改 FragmentTransaction ft openFragmentTransaction to
  • Tomcat 7 - JSESSIONID cookie 无法从 JavaScript 代码访问

    有谁知道 Tomcat 6 和 Tomcat 7 之间的配置发生了什么变化会导致JSESSIONIDcookie 无法通过 JavaScript 访问 使用 Tomcat 6 alert document cookie JSESSIONID
  • 如何配置log4j2具有两个根级别?

    我想按以下方式配置 log4j2 向 Sentry 报告错误事件 将 INFO 事件报告到日志文件 就像是
  • 边距和填充之间的区别?

    到底有什么区别margin and padding在CSS中 看来确实没有多大用处 您能否举个例子来说明差异所在 以及为什么了解差异很重要 padding是内容和内容之间的空间border 然而margin是边界之外的空间 这是我从谷歌快速
  • 如何在 Spring Rest Controller 中区分部分更新的 null 值和未提供的值

    当使用 Spring Rest Controller 中的 PUT 请求方法部分更新实体时 我试图区分 null 值和未提供的值 考虑以下实体作为示例 Entity private class Person Id GeneratedValu
  • 为有效信用卡生成随机数的好方法是什么?

    我正在用 Java 开发一套用于验证和使用信用卡的工具 到目前为止 我支持 卢恩验证 日期验证 简单到期 基于品牌 Visa MasterCard 等 的卡代码长度验证 CVV CVC CID 信用卡号长度验证 基于品牌 BIN IIN 验
  • pandas groupby 可以将 DataFrame 转换为 Series 吗?

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