python - 有效地指定具有相同前缀的多个列名称
问题描述
我正在进行回归,我的观察是在公司层面。我想控制公司的类型[它生产什么]。我将这些信息保存在一个对象变量中,然后将其转换为分类变量,然后从中取出假人。
df['Product Type'] = df['Product Type'].astype('category')
df = pd.get_dummies(df, columns=['Product Type']).head()
我的样本非常大,我最终得到了很多虚拟变量。将它们一个一个地引入我的模型中(可能有 10-15 个)是相当多的工作。
reg = sm.OLS(endog=df['Y'], exog= df[['X1', 'Number of workers', 'X2', "Product Type_Jewellery", "Product_Type_Apparel", (all the other product dummies) ]], missing='drop')
有没有更有效的方法来做到这一点?在 stata 中,我使用了前缀 i.Product_Type ,它会向软件表明必须将 String 变量视为一个分类变量......有什么类似的吗?
解决方案
用于str.contains
查找包含“Product_*”的列,访问它们变得容易。
c = df.columns[df.columns.str.contains('Product')]
如果不需要正则表达式,您可以初始化c
为
c = df.columns[df.columns.str.contains('Product', regex=False)]
或者,使用str.startswith
:
c = df.columns[df.columns.str.startswith('Product')]
或者,列表理解:
c = [c_ for c_ in df if c_.startswith('Product')]
最后,通过解包访问子集c
:
subset = df[['X1', 'Number of workers', 'X2', *c]]
reg = sm.OLS(endog=df['Y'], exog=subset, missing='drop')
推荐阅读
- android - Jacoco 代码覆盖率显示测试报告而不是覆盖率报告
- knockout.js - 淘汰赛 js:如何将参数传递给淘汰赛点击函数?
- matlab - 如何创建二进制 [0,1]?
- php - 添加自定义 Wordpress 小部件会使媒体库崩溃
- javascript - IE 无法使用动态加载脚本中的 Js 类
- java - 为什么 Spring 有时不将请求委托给控制器?
- laravel - Laravel 重定向到可选页面后注销
- alamofire - Alamofire重试请求后如何跟踪URLSessionTask
- list - NetLogo:如何比较两个子列表
- mingw - SFML 编译运行缺少 dll