首页 > 编程问答 >Groupby 以及变换和回归

Groupby 以及变换和回归

时间:2024-07-24 08:03:41浏览次数:11  
标签:python pandas

我试图从简单的回归中获得残差。此回归按每个年份和组进行。这就是我所做的。但是,有没有办法将残差作为新列与原始数据帧一起获取?

df=pd.DataFrame({'Name':['a','b','c','d','e','a','b','c','d','e','a','b','c','d','e'],
                 'Year':[2020,2020,2020,2020,2020,2021,2021,2021,2021,2021,2022,2022,2022,2022,2022],
                'Group':['H','L','N','N','N','H','L','N','N','N','H','L','N','N','N'],
                'Value':[0.3,0.2,0.3,0.1,0.1,0.2,0.3,0.2,0.2,0.1,0.4,0.1,0.1,0.3,0.1],
                'Mom':[5,1,3,5,2,1,1,3,6,4,4,7,8,3,2]})

def a(row):
    X = row['Value']  # independent variable
    y = row['Mom']   # dependent variable
    X = sm.add_constant(X)
    reg = sm.OLS(y, X).fit()
    
    return reg.resid

df.groupby(['Year','Group']).apply(a)

我当然可以将上述输出附加到原始数据帧,但我试图通过转换来实现这一点。我已经尝试过这个但没有成功。

df.groupby(['Year','Group']).transform(a)


可以使用 transform 方法将残差添加回原始 DataFrame,但你需要修改你的函数以返回与输入组大小相同的残差序列。

以下是完成此操作的方法:

import pandas as pd
import statsmodels.api as sm

df = pd.DataFrame({
    'Name': ['a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e'],
    'Year': [2020, 2020, 2020, 2020, 2020, 2021, 2021, 2021, 2021, 2021, 2022, 2022, 2022, 2022,
             2022],
    'Group': ['H', 'L', 'N', 'N', 'N', 'H', 'L', 'N', 'N', 'N', 'H', 'L', 'N', 'N', 'N'],
    'Value': [0.3, 0.2, 0.3, 0.1, 0.1, 0.2, 0.3, 0.2, 0.2, 0.1, 0.4, 0.1, 0.1, 0.3, 0.1],
    'Mom': [5, 1, 3, 5, 2, 1, 1, 3, 6, 4, 4, 7, 8, 3, 2]
})

def a(group):
    X = group['Value']
    y = group['Mom']
    X = sm.add_constant(X)
    reg = sm.OLS(y, X).fit()
    return reg.resid

df['Residuals'] = df.groupby(['Year', 'Group']).transform(a)
print(df)

在这个修改后的代码中:

  1. 函数 a 现在接受一个组(DataFrame 的子集)作为输入。
  2. a 函数现在返回 reg.resid ,它是与输入组大小相同的残差序列。
  3. 我们使用 transform a 函数应用于每个组,并将结果直接分配给 df 中的新列 Residuals

这将为 DataFrame 中的每一行提供一个对应于其年份和组的回归残差。

标签:python,pandas
From: 78785952

相关文章

  • 在spyder-python上随机出现的这些奇怪的亮点是什么
    在此处输入图像描述每次我单击此按钮或进行任何更改时,都会创建奇怪的突出显示,当我最小化功能时更是如此。有什么建议如何摆脱这些或可能的原因是什么?谢谢!我尝试更改外观首选项中的设置,但无法影响问题。很抱歉,我无法直接查看或与Spyder界面交互。我是一个AI......
  • 比较Python字典并找到缺失的元素
    我遇到了一个问题,我已经尝试了几天但没有得到任何结果。我想比较两个字典,在一个字典中有“赛前”足球比赛,在第二个字典中有“现场”足球比赛。我想将它们相互比较并打印它们(如果有)没有赛前比赛直播。示例1pre=[{"Home":"Genoa","Away":"In......
  • Python使用Visual Studio打印功能不显示输出
    任务:检查一个整数是正数还是负数。检查整数是否能被2整除。当输入0时,我需要退出循环并报告每个计数和总和。print函数没有显示任何输出。这是我从defmain()开始使用的代码defmain():countpositive=0countnegative=0count_divisible_by_2=0sump......
  • 检测 Pandas 列中特征漂移的矢量化方法是什么?
    我正在研究非常大的熊猫数据框,这些数据框保存具有显着特征漂移的时间序列。漂移通常是突然的(例如,特征将比之前几个时期大1.5-2.0倍)。我找到了几种检测“概念漂移”的解决方案。一种方便的选择是河流然而,该解决方案不是矢量化的。显然,矢量化方法要快得多-最......
  • Python 中的像素最小二乘法
    我有一个非线性前向模型,它计算每个像素参数w的灰度图像。我还可以使用scipys优化函数来反转模型。我目前遇到的唯一问题是图像的大小使得这个解决方案非常慢...比如7%的像素在40分钟内计算得很慢。我使用for循环遍历所有像素并按像素应用模型。我尝试过......
  • SQL 命令在手动运行时工作正常(SQL Developer),但在 Python 的 oracledb 模块中给出 ORA-
    我正在使用OracleSQL数据库,并且我想运行该命令ALTERSESSIONSETNLS_DATE_FORMAT='YYYY-MM-DD';当我从SQLDeveloper应用程序手动运行它时,它工作正常。但是,当我使用oracledb模块从Python运行它时,出现以下错误:ErrorrunningSQLscript:ORA-00922:mi......
  • 在pip包中分发pythonnet dll类型信息
    我已经能够使用C#通过以下方式加载pythonnetdll:fromimportlib.resourcesimportpathimportsys#Assuming'my_package.lib'isthesub-packagecontainingtheDLLswithpath('pyrp.lib','')aslib_path:sys.path.append......
  • 尝试使用 pyinstaller 将 python 文件转换为可执行文件时出现 TypeError
    稍后的目的是通过命令行向GPT4all发送问题并将答案存储在文本文档中。我想将阻止代码转换为exe,但它产生了TypeError。这是到目前为止的代码:fromgpt4allimportGPT4Allmodel=GPT4All("Meta-Llama-3-8B-Instruct.Q4_0.gguf",device='cpu')#downloads/loads......
  • 使用 Python-PlexAPI 获取 plex 上所有好友的关注列表
    有关如何接收我的plex服务器上所有用户的监视列表的任何提示。我正在根据一些规则创建自动删除,其中一个规则是,如果电影位于用户观看列表中,则不应删除该电影。我遇到了麻烦,因为所有与观看列表相关的内容都在MyPlexAccount上。lexapi.myplex.MyPlexAccount具有我的用......
  • 如何在 Python 中查看与 Azure OpenAI 助手关联的所有上传文件?
    我正在使用Python对文档中的问题进行基准测试,并在jupyter笔记本中实例化了我的助手。我想确认助手是否有我上传的文件,但似乎找不到有关此功能将使用什么功能的文档。使用适用于AzureOpenAI的最新版本的PythonAPI。目前,无法使用AzureOpenAI的PythonAPI直接查看......