下面是一个使用Pandas进行按两列分组的回归的示例代码:
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
# 创建示例数据
data = pd.DataFrame({'A': np.random.randint(1, 10, 100),
'B': np.random.randint(1, 10, 100),
'C': np.random.randint(1, 10, 100),
'D': np.random.randint(1, 10, 100)})
# 按A和B列分组
grouped = data.groupby(['A', 'B'])
# 定义回归模型
model = LinearRegression()
# 定义结果存储列表
results = []
# 对每个分组进行回归计算
for _, group in grouped:
X = group[['C', 'D']] # 自变量
y = group['A'] # 因变量
# 训练回归模型
model.fit(X, y)
# 提取回归系数和截距
coef = model.coef_
intercept = model.intercept_
# 将结果存储到列表中
results.append({'A': group['A'].unique()[0],
'B': group['B'].unique()[0],
'Coef_C': coef[0],
'Coef_D': coef[1],
'Intercept': intercept})
# 将结果转换为DataFrame
results_df = pd.DataFrame(results)
print(results_df)
这个示例代码中,首先使用Pandas创建了一个包含'A', 'B', 'C', 'D'四列的示例数据。然后使用groupby
方法按照'A'和'B'两列进行分组,得到一个分组对象grouped
。
接下来,定义了一个线性回归模型LinearRegression()
,并创建了一个空的结果存储列表results
。
然后,通过遍历每个分组,提取出自变量X
和因变量y
,并使用fit
方法训练回归模型。然后从训练好的模型中提取回归系数和截距,并将结果存储到results
列表中。
最后,将结果列表转换为DataFrame,输出结果。
这个示例代码可以根据实际需求进行修改和扩展,例如可以更改回归模型、添加更多自变量等。
上一篇:按两列分组并添加列
下一篇:按两列分组后获取组之间的差异