首页 > 解决方案 > 有效地指定具有相同前缀的多个列名称

问题描述

我正在进行回归,我的观察是在公司层面。我想控制公司的类型[它生产什么]。我将这些信息保存在一个对象变量中,然后将其转换为分类变量,然后从中取出假人。

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 变量视为一个分类变量......有什么类似的吗?

标签: pythonpandasencoding

解决方案


用于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')

推荐阅读